/************************************************************** * 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" DO_COM( do_chill ) { DESCRIPTOR_DATA *d; CHAR_DATA *victim; CHAR_DATA *ach; char arg[MAX_INPUT_LENGTH]; int sn; int level; int spelltype; argument = one_argument( argument, arg ); if ( IS_NPC( ch ) ) return; if ( get_tribe( ch, TRIBE_WENDIGOS ) < 3 ) { send_to_char( "Huh?\n\r", ch ); return; } if ( arg[0] == '\0' && ch->fighting == NULL ) { send_to_char( "Who do you wish to use chill on?\n\r", ch ); return; } if ( ( victim = ch->fighting ) == NULL ) { if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } } if ( ch == victim ) { send_to_char( "To hot are we?\n\r", ch ); return; } if ( is_safe( ch, victim ) ) { if ( !IS_NPC( victim ) && IS_MORE( victim, MORE_GUARDIAN ) ) { guardian_message( victim ); act( "$n just failed to use chill on you.", ch, NULL, victim, TO_VICT ); } return; } if ( IS_ITEMAFF( victim, ITEMA_ICESHIELD ) ) { send_to_char( "You failed.\n\r", ch ); return; } if ( ( sn = skill_lookup( "chill touch" ) ) < 0 ) { send_to_char( "Bugged, please inform an Imp.\n\r", ch ); return; } for( d = descriptor_list ; d != NULL ; d = d->next ) { if ( d->connected != CON_PLAYING ) continue; if ( ( ach = d->character ) == NULL ) continue; if ( ch->in_room == NULL || ach->in_room == NULL ) continue; if ( ach->in_room->area != ch->in_room->area ) continue; if ( ach == ch ) send_to_char( "You call forth the winter spirits.\n\r", ch ); else if ( ach->in_room == ch->in_room ) act( "$n calls forth the winter spirts.", ch, NULL, victim, TO_ROOM ); else send_to_char( "A cold wind shrieks past you.\n\r", ch ); } spelltype = skill_table[sn].target; level = ch->spl[spelltype] * 5; (*skill_table[sn].spell_fun) ( sn, level, ch, victim ); WAIT_STATE( ch, 12 ); return; } DO_COM( do_moonbridge ) { CHAR_DATA *victim; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *portal; char arg[MAX_INPUT_LENGTH]; int duration; argument = one_argument( argument, arg ); if ( IS_NPC( ch ) ) return; if ( get_auspice( ch, AUSPICE_RAGABASH ) < 5 ) { send_to_char( "Huh?\n\r", ch ); return; } if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to send a moonbridge to?\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 == victim) { act( "Why do that? Your already here.", ch, 0, victim, TO_CHAR ); return; } if ( victim == ch || IS_NPC( victim ) || !IS_WEREWOLF( victim ) || !IS_IMMUNE( victim, IMM_SUMMON ) || victim->in_room == NULL || victim->in_room == ch->in_room ) { if ( !IS_NPC( victim ) && IS_WEREWOLF( victim ) && IS_MORE( victim, MORE_GUARDIAN ) ) { guardian_message( victim ); act( "$n just failed to create a Moon Bridge to you.", ch, NULL, victim, TO_VICT ); } send_to_char( "You failed.\n\r", ch ); return; } if ( ( pObjIndex = get_obj_index( OBJ_VNUM_PORTAL ) ) == NULL ) { send_to_char( "Object missing, please inform an imp.\n\r", ch ); return; } duration = number_range( 1, 3 ) * 15; portal = create_object( pObjIndex, 0 ); portal->value[0] = victim->in_room->vnum; portal->value[3] = ch->in_room->vnum; portal->timer = duration; if ( IS_AFFECTED( ch,AFF_SHADOWPLANE ) ) portal->extra_flags = ITEM_SHADOWPLANE; obj_to_room( portal, ch->in_room ); FILL_STRING( portal->name, "moonvridge portal" ); FILL_STRING( portal->short_descr, "a Moon Bridge" ); FILL_STRING( portal->description, "A Moon Bridge floats here." ); portal = create_object( pObjIndex, 0 ); portal->value[0] = ch->in_room->vnum; portal->value[3] = victim->in_room->vnum; portal->timer = duration; if ( IS_AFFECTED( ch,AFF_SHADOWPLANE ) ) portal->extra_flags = ITEM_SHADOWPLANE; obj_to_room( portal, victim->in_room ); FILL_STRING( portal->name, "moonbridge portal" ); FILL_STRING( portal->short_descr, "a Moon Bridge" ); FILL_STRING( portal->description, "A Moon Bridge floats here." ); act( "$p appears in front of $n.", ch, portal, NULL, TO_ROOM ); act( "$p appears in front of you.", ch, portal, NULL, TO_CHAR ); act( "$p appears in front of $n.", victim, portal, NULL, TO_ROOM ); act( "$p appears in front of you.", victim, portal, NULL, TO_CHAR ); if ( !IS_NPC( victim ) && IS_MORE( victim , MORE_GUARDIAN ) ) { guardian_message( victim ); act( "$n has just created a Moon Bridge to you.", ch, NULL, victim, TO_VICT ); } return; } DO_COM( do_gate ) { CHAR_DATA *victim; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *portal; char arg[MAX_INPUT_LENGTH]; int duration; argument = one_argument( argument, arg ); if ( IS_NPC( ch ) ) return; if ( get_tribe( ch, TRIBE_SILENT_STRIDERS ) < 5 ) { send_to_char( "Huh?\n\r", ch ); return; } if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to send a gate of the moon to?\n\r", ch ); return; } if ( weather_info.sunlight != SUN_DARK ) { send_to_char( "This power can only be used during the night.\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 == victim) { act( "Why do that? Your already here.", ch, 0, victim, TO_CHAR ); return; } if ( victim == ch || (IS_NPC( victim ) && victim->level > 150) || ( !IS_NPC( victim ) && !IS_IMMUNE( victim, IMM_SUMMON ) ) || victim->in_room == NULL || victim->in_room == ch->in_room ) { if ( !IS_NPC( victim ) && IS_MORE( victim, MORE_GUARDIAN ) ) { guardian_message( victim ); act( "$n just failed to create a Moon Bridge to you.", ch, NULL, victim, TO_VICT ); } send_to_char( "You failed.\n\r", ch ); return; } if ( ( pObjIndex = get_obj_index( OBJ_VNUM_PORTAL ) ) == NULL ) { send_to_char( "Object missing, please inform an imp.\n\r", ch ); return; } duration = number_range( 1, 3 ) * 15; portal = create_object( pObjIndex, 0 ); portal->value[0] = victim->in_room->vnum; portal->value[3] = ch->in_room->vnum; portal->timer = duration; if ( IS_AFFECTED( ch,AFF_SHADOWPLANE ) ) portal->extra_flags = ITEM_SHADOWPLANE; obj_to_room( portal, ch->in_room ); FILL_STRING( portal->name, "moonbridge portal" ); FILL_STRING( portal->short_descr, "a Moon Bridge" ); FILL_STRING( portal->description, "A Moon Bridge floats here." ); portal = create_object( pObjIndex, 0 ); portal->value[0] = ch->in_room->vnum; portal->value[3] = victim->in_room->vnum; portal->timer = duration; if ( IS_AFFECTED( ch,AFF_SHADOWPLANE ) ) portal->extra_flags = ITEM_SHADOWPLANE; obj_to_room( portal, victim->in_room ); FILL_STRING( portal->name, "moonbridge portal" ); FILL_STRING( portal->short_descr, "a Moon Bridge" ); FILL_STRING( portal->description, "A Moon Bridge floats here." ); act( "$p appears in front of $n.", ch, portal, NULL, TO_ROOM ); act( "$p appears in front of you.", ch, portal, NULL, TO_CHAR ); act( "$p appears in front of $n.", victim, portal, NULL, TO_ROOM ); act( "$p appears in front of you.", victim, portal, NULL, TO_CHAR ); if ( !IS_NPC( victim ) && IS_MORE( victim , MORE_GUARDIAN ) ) { guardian_message( victim ); act( "$n has just created a Moon Bridge to you.", ch, NULL, victim, TO_VICT ); } return; } DO_COM( do_brew ) { OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if ( IS_NPC( ch ) ) return; if ( get_tribe( ch, TRIBE_BONE_GNAWERS ) < 1 ) { send_to_char( "Huh?\n\r", ch ); return; } if ( arg[0] == '\0' ) { send_to_char( "Brew what?\n\r", ch ); return; } if ( ( obj = get_obj_here( ch, arg ) ) == NULL ) { send_to_char( "That isn't here.\n\r", ch ); return; } if ( obj->item_type != ITEM_FOUNTAIN ) { send_to_char( "You can only brew fountains.\n\r", ch ); return; } if ( strlen( obj->questmaker ) > 2 && obj->questmaker != NULL && !str_cmp( obj->questmaker, ch->name ) ) { send_to_char( "You can't brew a fountain that belongs to someone else.\n\r", ch ); return; } if ( obj->value[2] == 1 ) { obj->value[2] = 0; act( "You transform the beer in $p into water.", ch, obj, NULL, TO_CHAR ); act( "$n transforms the beer in $p into water.", ch, obj, NULL, TO_ROOM ); } else if ( obj->value[2] == 0 ) { obj->value[2] = 1; act( "You transform the water in $p into beer.", ch, obj, NULL, TO_CHAR ); act( "$n transforms the water in $p into beer.", ch, obj, NULL, TO_ROOM ); } else send_to_char( "You can only transform water and beer.\n\r", ch ); return; } DO_COM( do_klaive ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *klaive; if ( IS_NPC( ch ) ) return; if ( get_auspice( ch, AUSPICE_GALLIARD ) < 4 ) { send_to_char( "Huh?\n\r", ch ); return; } if ( ch->practice < 85 ) { send_to_char( "It costs 85 primal to create a lesser Klaive.\n\r", ch ); return; } if ( ( pObjIndex = get_obj_index( OBJ_VNUM_PROTOPLASM ) ) == NULL ) { send_to_char( "Error...missing object, please inform an imp.\n\r", ch ); return; } klaive = create_object( pObjIndex, 60 ); FILL_STRING( klaive->name, "lesser klaive" ); FILL_STRING( klaive->short_descr, "a lesser Klaive" ); FILL_STRING( klaive->description, "A lesser Klaive is lying here." ); FILL_STRING( klaive->questmaker, ch->name ); FILL_STRING( klaive->questowner, ch->name ); klaive->weight = 1; klaive->quest = 0; SET_BIT( klaive->spectype, SITEM_SILVER); SET_BIT( klaive->quest, QUEST_RELIC ); SET_BIT( klaive->quest, QUEST_NOGIFT ); SET_BIT( klaive->extra_flags, ITEM_LOYAL ); SET_BIT( klaive->quest, QUEST_SPELLPROOF ); klaive->resistance = 25; klaive->item_type = ITEM_WEAPON; klaive->wear_flags = ITEM_WIELD + ITEM_TAKE; klaive->value[0] = 0; klaive->value[1] = 25; klaive->value[2] = 50; klaive->value[3] = 1; ch->practice -= 85; obj_to_char( klaive, ch ); act( "You reach into the air and produce $p.", ch, klaive, NULL, TO_CHAR ); act( "$n reaches into the air and produce $p.", ch, klaive, NULL, TO_ROOM ); return; } void do_phase(CHAR_DATA *ch, char *argument) { if (!IS_OUTSIDE(ch)) { send_to_char("You can't see the moon indoors.\n\r", ch); return; } // Werewolves can sence the moonphases anytime if (weather_info.moonlight == MOON_DOWN && !IS_WEREWOLF(ch)) { send_to_char("The moon is not up.\n\r", ch); return; } if (weather_info.moonphase == MOON_NEW) { send_to_char("The moon is new.\n\r", ch); return; } if (weather_info.moonphase == MOON_CRESCENT) { send_to_char("The moon is crescent.\n\r", ch); return; } if (weather_info.moonphase == MOON_HALF) { send_to_char("The moon is half tonight.\n\r", ch); return; } if (weather_info.moonphase == MOON_GIBBOUS) { send_to_char("The moon is in its gibbous phase.\n\r", ch); return; } if (weather_info.moonphase == MOON_FULL) { send_to_char("The moon is full tonight.\n\r", ch); return; } if (weather_info.moonphase == MOON_WANING) { send_to_char("The moon is waning.\n\r", ch); return; } else { send_to_char("bug, please inform Morglum.\n\r", ch); return; } } DO_COM( do_hearttwister ) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument( argument, arg ); if ( IS_NPC( ch ) ) return; if ( get_auspice( ch, AUSPICE_GALLIARD ) < 5 ) { STC( "Huh?\n\r", ch ); return; } if ( ch->pcdata->heart_twister > 0 ) { sprintf( buf, "You have to wait %d %s, before you can use heart twister again.\n\r", ch->pcdata->heart_twister, ch->pcdata->heart_twister == 1 ? "second" : "seconds" ); send_to_char( buf, ch ); return; } if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to use heart twister on?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if ( IS_NPC( victim ) ) { send_to_char( "You can't use heart twister on NPC's.\n\r", ch ); return; } if ( ch == victim ) { send_to_char( "You can't use heart twister on yourself.\n\r", ch ); return; } if ( !IS_IMMUNE( victim, IMM_VAMPIRE ) ) { send_to_char( "They refuse to have heart twister used on them.\n\r", ch ); return; } ch->pcdata->heart_twister = 60; act( "$n places $s hands over your chest.", ch, NULL, victim, TO_VICT ); act( "You place your hands over $N's chest.", ch, NULL, victim, TO_CHAR ); act( "$n places $s hands over $N's chest.", ch, NULL, victim, TO_NOTVICT ); if ( IS_IMMUNE( victim, IMM_STAKE ) ) { send_to_char( "Nothing happens.\n\r", ch ); return; } if ( number_bits( 3 ) != 0 ) { send_to_char( "Nothing Happens.\n\r", ch ); return; } if ( strlen( victim->pcdata->love ) > 2 ) { sprintf( buf, "$n removes your love for %s.", capitalize( victim->pcdata->love ) ); act( buf, ch, NULL, victim, TO_VICT ); sprintf( buf, "You remove $N's love for %s.", capitalize( victim->pcdata->love ) ) ; act( buf, ch, NULL, victim, TO_CHAR ); FILL_STRING( victim->pcdata->love, "" ); return; } else if ( strlen( victim->pcdata->conding ) > 2 ) { sprintf( buf, "$n removes your conditioning of %s.", capitalize( victim->pcdata->conding ) ); act( buf, ch, NULL, victim, TO_VICT ); sprintf( buf, "You remove $N's conditioning of %s.", capitalize( victim->pcdata->conding ) ); act( buf, ch, NULL, victim, TO_CHAR ); FILL_STRING( victim->pcdata->conding, "" ); REMOVE_BIT( victim->more, MORE_LOYAL ); return; } send_to_char( "Nothing Happens.\n\r", ch ); return; } DO_COM( do_circleattack ) { CHAR_DATA *vch; sh_int dam = 0; sh_int num =0; char buf[MAX_STRING_LENGTH]; if ( IS_NPC( ch ) ) return; if ( get_tribe( ch, TRIBE_GLASS_WALKERS ) < 5 ) { send_to_char( "Huh?\n\r", ch ); return; } if ( ch->pcdata->circleattack > 0 ) { sprintf( buf, "You have to wait %d %s, before you can use circleattack again.\n\r", ch->pcdata->circleattack, ch->pcdata->circleattack == 1 ? "second" : "seconds" ); send_to_char( buf, ch ); return; } if ( ( vch = ch->fighting ) == NULL ) { send_to_char( "Your not fighting anyone.\n\r", ch ); return; } num = 0; ch->pcdata->circleattack = 60; for ( vch = ch->in_room->people ; vch != NULL ; vch = vch->next_in_room ) { if ( vch == ch ) continue; if ( vch->fighting == NULL ) continue; if ( vch->fighting != ch ) continue; num++; dam = number_range( 500, 2000 ); if ( number_bits( 3 ) == 0 ) { dam *= 3; dam += number_bits( 3 ); } act( "You manage to get behind $N, and push $M to the ground.", ch, NULL, vch, TO_CHAR ); act( "$n manages to get behind you, and pushes you to the ground.", ch, NULL, vch, TO_VICT ); act( "$n manages to get behind $N, and pushes $M to the ground.", ch, NULL, vch, TO_NOTVICT ); WAIT_STATE( vch, 6 ); } return; } DO_COM( do_grab ) { CHAR_DATA *victim; CHAR_DATA *rch; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if ( IS_NPC( ch ) ) return; if ( get_tribe( ch, TRIBE_STARGAZERS ) < 5 ) { STC( "Huh?\n\r", ch ); return; } if ( ch->pcdata->umbra_timer > 0 ) { sprintf( buf, "You have to wait %d %s, before you can use grab again.\n\r", ch->pcdata->umbra_timer, ch->pcdata->umbra_timer == 1 ? "second" : "seconds" ); send_to_char( buf, ch ); return; } if ( arg[0] == '\0' ) { if ( IS_AFFECTED( ch, AFF_SHADOWPLANE ) ) send_to_char( "Grab who into the umbra?\n\r", ch ); else send_to_char( "Grab who out of the umbra?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( IS_AFFECTED( ch, AFF_SHADOWPLANE ) && IS_AFFECTED( victim, AFF_SHADOWPLANE ) ) { send_to_char( "They are already in the umbra.\n\r", ch ); return; } else if ( !IS_AFFECTED( ch, AFF_SHADOWPLANE ) && !IS_AFFECTED( ch, AFF_SHADOWPLANE ) ) { send_to_char( "They are already in the real world.\n\r", ch ); return; } if ( !IS_NPC( victim ) && !IS_IMMUNE( victim, IMM_VAMPIRE ) ) { send_to_char( "They have to be a willing target.\n\r", ch ); return; } if ( victim->fighting != NULL && victim->in_room != NULL ) { stop_fighting( victim, TRUE ); for ( rch = victim->in_room->people ; rch != NULL ; rch = rch->next_in_room ) { if ( rch->fighting == victim ) stop_fighting( rch, TRUE ); } } if ( IS_AFFECTED( ch, AFF_SHADOWPLANE ) ) { act("You grab hold of $N, and pull $M into the umbra.",ch,NULL,victim,TO_CHAR); act("$n grabs hold of you, and pulls you into the umbra.",ch,NULL,victim,TO_VICT); act("$N vanishes from sight.",ch,NULL,victim,TO_NOTVICT); SET_BIT( victim->affected_by, AFF_SHADOWPLANE ); ch->pcdata->umbra_timer = 150; if ( !IS_NPC( victim ) && !IS_WEREWOLF( victim ) ) victim->pcdata->umbra = 60; return; } else { act("You grab hold of $N, and pull $M into the real world.",ch,NULL,victim,TO_CHAR); act("$n grabs hold of you, and pulls you into the real world.",ch,NULL,victim,TO_VICT); act("$N fades back into existance.",ch,NULL,victim,TO_NOTVICT); REMOVE_BIT( victim->affected_by, AFF_SHADOWPLANE ); ch->pcdata->umbra_timer = 150; if ( !IS_NPC( victim ) ) victim->pcdata->umbra = 0; return; } return; } DO_COM( do_minorcreate ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char buf[MAX_STRING_LENGTH]; char obj_name[MAX_STRING_LENGTH]; if ( IS_NPC( ch ) ) return; if ( get_tribe( ch, TRIBE_BONE_GNAWERS ) < 4 ) { STC( "Huh?\n\r", ch ); return; } if ( ch->pcdata->minor_create > 0 ) { sprintf( buf, "You have to wait %d %s, before you can use minor creation again.\n\r", ch->pcdata->minor_create, ch->pcdata->minor_create == 1 ? "second" : "seconds" ); send_to_char( buf, ch ); return; } if ( argument[0] == '\0' ) { send_to_char( "Minor create what?\n\r", ch ); return; } if ( strlen( argument ) < 3 ) { send_to_char( "Nothing happens.\n\r", ch ); return; } if ( ch->practice < 15 ) { send_to_char( "You require 15 primal to minor create something.\n\r", ch ); return; } if ( ( pObjIndex = get_obj_index( OBJ_VNUM_PROTOPLASM ) ) == NULL ) { send_to_char( "Error....missing object, please inform Morglum.\n\r", ch ); return; } if ( !IS_IMMORTAL( ch ) ) ch->pcdata->minor_create = 30; strcpy( obj_name, argument ); strcpy( buf, strip_small_args( argument ) ); ch->practice -= 15; obj = create_object( pObjIndex, 12 ); FILL_STRING( obj->name, buf ); FILL_STRING( obj->short_descr, obj_name ); if ( is_in( obj_name, "|pair of*" ) ) sprintf( buf, "%s are lying here.", obj_name ); else sprintf( buf, "%s is lying here.", obj_name ); FILL_STRING( obj->description, buf ); FILL_STRING( obj->questmaker, ch->name ); FILL_STRING( obj->questowner, ch->name ); obj->weight = 1; if ( is_in( obj_name, "|torch*light*lantern*" ) ) { obj->item_type = ITEM_LIGHT; obj->wear_flags = ITEM_WIELD + ITEM_TAKE; obj->value[0] = 0; obj->value[1] = 0; obj->value[2] = -1; obj->value[3] = 0; } else if ( is_in( obj_name, "|bag*container*" ) ) { obj->item_type = ITEM_CONTAINER; obj->wear_flags = ITEM_TAKE; obj->value[0] = 500; obj->value[1] = 1; obj->value[2] = -1; obj->value[3] = 0; } else if ( is_in( obj_name, "|canoe*boat*raft*" ) ) { obj->item_type = ITEM_BOAT; obj->wear_flags = ITEM_TAKE; obj->value[0] = 0; obj->value[1] = 0; obj->value[2] = 0; obj->value[3] = 0; } else if ( is_in( obj_name, "|can*bottle*barrel*glass*" ) ) { obj->item_type = ITEM_FOUNTAIN; obj->wear_flags = ITEM_TAKE; obj->value[0] = 1000; obj->value[1] = 1000; if ( is_in( obj_name, "|beer*" ) ) obj->value[2] = 1; else if ( is_in( obj_name, "|wine*" ) ) obj->value[2] = 2; else if ( is_in( obj_name, "|dark ale*" ) ) obj->value[2] = 4; else if ( is_in( obj_name, "|ale*" ) ) obj->value[2] = 3; else if ( is_in( obj_name, "|whisky*" ) ) obj->value[2] = 5; else if ( is_in( obj_name, "|lemonade*" ) ) obj->value[2] = 6; else if ( is_in( obj_name, "|firebreather*" ) ) obj->value[2] = 7; else if ( is_in( obj_name, "|local speciality*" ) ) obj->value[2] = 8; else if ( is_in( obj_name, "|slime*" ) ) obj->value[2] = 9; else if ( is_in( obj_name, "|milk*" ) ) obj->value[2] = 10; else if ( is_in( obj_name, "|tea*" ) ) obj->value[2] = 11; else if ( is_in( obj_name, "|coffee*" ) ) obj->value[2] = 12; else if ( is_in( obj_name, "|blood*" ) ) obj->value[2] = 13; else if ( is_in( obj_name, "|salt water*" ) ) obj->value[2] = 14; else if ( is_in( obj_name, "|cola*coke*" ) ) obj->value[2] = 15; else obj->value[2] = 0; if ( is_in( obj_name, "|poison*" ) ) obj->value[3] = 1; else obj->value[3] = 0; } else if ( is_in( obj_name, "|pie*cake*chocolate*pizza*apple*banana*" ) || is_in( obj_name, "|strawberry*chip*sausage*" ) ) { obj->item_type = ITEM_FOOD; obj->wear_flags = ITEM_TAKE; obj->value[0] = 8; obj->value[1] = 0; obj->value[2] = 0; if ( is_in( obj_name, "|poison*" ) ) obj->value[3] = 1; else obj->value[3] = 0; } else if ( all_in( obj_name, "&wood*stake*" ) ) { obj->item_type = ITEM_STAKE; obj->wear_flags = ITEM_TAKE + ITEM_WIELD; obj->value[0] = 0; obj->value[1] = 0; obj->value[2] = 0; obj->value[3] = 0; } else if ( is_in( obj_name, "|ring*collar*amulet*cape*breastplate*helmet*" ) || is_in( obj_name, "|hat*legging*trouser*jean*boot*shoe*trainer*" ) || is_in( obj_name, "|gauntlet*glove*plate*sleeve*belt*watch*bracer*" ) || is_in( obj_name, "|shield*mask*visor*" ) ) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE; obj->value[0] = 15; obj->value[1] = 0; obj->value[2] = 0; obj->value[3] = 0; if ( is_in( obj_name, "|ring*" ) ) obj->wear_flags += ITEM_WEAR_FINGER; else if ( is_in( obj_name, "|collar*amulet*" ) ) obj->wear_flags += ITEM_WEAR_NECK; else if ( is_in( obj_name, "|breastplate*" ) ) obj->wear_flags += ITEM_WEAR_BODY; else if ( is_in( obj_name, "|helmet*hat*" ) ) obj->wear_flags += ITEM_WEAR_HEAD; else if ( is_in( obj_name, "|legging*trouser*jean*" ) ) obj->wear_flags += ITEM_WEAR_LEGS; else if ( is_in( obj_name, "|boot*shoe*trainer*" ) ) obj->wear_flags += ITEM_WEAR_FEET; else if ( is_in( obj_name, "|gauntlet*glove*" ) ) obj->wear_flags += ITEM_WEAR_HANDS; else if ( is_in( obj_name, "|sleeve*plate*" ) ) obj->wear_flags += ITEM_WEAR_ARMS; else if ( is_in( obj_name, "|belt*" ) ) obj->wear_flags += ITEM_WEAR_WAIST; else if ( is_in( obj_name, "|watch*bracer*" ) ) obj->wear_flags += ITEM_WEAR_WRIST; else if ( is_in( obj_name, "|mask*visor*" ) ) obj->wear_flags += ITEM_WEAR_FACE; else obj->wear_flags += ITEM_WIELD; if ( is_in( obj_name, "|silver*" ) ) SET_BIT( obj->spectype, SITEM_SILVER ); } else if ( is_in( obj_name, "|sword*blade*dagger*whip*claw*club*" ) || is_in( obj_name, "|blast*grep*hoover*suck*" ) ) { obj->item_type = ITEM_WEAPON; obj->wear_flags = ITEM_TAKE + ITEM_WIELD; obj->value[0] = 0; obj->value[1] = 10; obj->value[2] = 20; if ( is_in( obj_name, "|sword*" ) ) obj->value[3] = 3; else if ( is_in( obj_name, "|dagger*" ) ) { if ( number_percent( ) <= 50 ) obj->value[3] = 2; else obj->value[3] = 11; } else if ( is_in( obj_name, "|whip*" ) ) obj->value[3] = 4; else if ( is_in( obj_name, "|claw*" ) ) obj->value[3] = 5; else if ( is_in( obj_name, "|club*" ) ) obj->value[3] = number_range( 7, 8 ); else if ( is_in( obj_name, "|blast*" ) ) obj->value[3] = 6; else if ( is_in( obj_name, "|grep*" ) ) obj->value[3] = 9; else if ( is_in( obj_name, "|hoover*suck*" ) ) obj->value[3] = 12; else obj->value[3] = 1; if ( is_in( obj_name, "|silver*" ) ) SET_BIT( obj->spectype, SITEM_SILVER ); } else { obj->item_type = ITEM_TRASH; obj->wear_flags = ITEM_TAKE; obj->value[0] = 0; obj->value[1] = 0; obj->value[2] = 0; obj->value[3] = 0; } obj_to_char( obj, ch ); act( "You reach into the air and produce $p.",ch,obj,NULL,TO_CHAR); act( "$n reaches into the air and produces $p.",ch,obj,NULL,TO_ROOM); return; } DO_COM( do_earthquake ) { int sn = 0; sh_int level = 0; char buf[MAX_STRING_LENGTH]; if ( IS_NPC( ch ) ) return; if ( get_tribe( ch, TRIBE_WENDIGOS ) < 2 ) { STC( "Huh?\n\r", ch ); return; } if ( ch->pcdata->earthquake > 0 ) { sprintf( buf, "You have to wait %d %s, before you can use earthquake again.\n\r", ch->pcdata->earthquake, ch->pcdata->earthquake == 1 ? "second" : "seconds" ); send_to_char( buf, ch ); return; } if ( ( sn = skill_lookup( "earthquake" ) ) < 0 ) { send_to_char( "Bugged, please inform Morglum.\n\r", ch ); return; } ch->pcdata->earthquake = 60; level = get_tribe( ch, TRIBE_WENDIGOS ) * 100; send_to_char( "You stamp your foot onto the ground incredibly hard!\n\r", ch ); act( "$n stamps $s foot onto the ground incredibly hard!",ch,NULL,NULL,TO_ROOM); spell_earthquake( sn, level, ch, ch ); return; } DO_COM( do_rageme ) { if ( IS_NPC( ch ) ) return; if ( !IS_WEREWOLF( ch ) ) { STC( "Huh?\n\r", ch ); return; } if (IS_SET(ch->act, PLR_WOLFMAN) && ch->pcdata->wolf > 100 ) { send_to_char("But you are already in a rage!\n\r",ch); return; } if ( ch->pcdata->rage ) { send_to_char( "You stop raging.\n\r", ch ); ch->pcdata->rage = FALSE; return; } send_to_char("You start snarling angrilly.\n\r",ch); act("$n starts snarling angrilly.",ch,NULL,NULL,TO_ROOM); ch->pcdata->rage = TRUE; }