/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * Envy Diku Mud improvements copyright (C) 1994 by Michael Quan, David * * Love, Guilherme 'Willie' Arnold, and Mitchell Tse. * * * * EnvyMud 2.0 improvements copyright (C) 1995 by Michael Quan and * * Mitchell Tse. * * * * In order to use any part of this Envy Diku Mud, you must comply with * * the original Diku license in 'license.doc', the Merc license in * * 'license.txt', as well as the Envy license in 'license.nvy'. * * In particular, you may not remove either of these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /* Blade Thirst was written by the Maniac from Mythran Mud * * Copyright (C) 1995-1996 The Maniac (a.k.a. Mark Janssen) * ***************************************************************************/ #if defined( macintosh ) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" /* Poison weapon by Thelonius for EnvyMud */ /* Blade thirst code is a changed version of poison weapon */ /* Written by The Maniac. This skill came from the internet book */ /* The Tome of Mighty Magic */ void do_bladethirst( CHAR_DATA *ch, char *argument ) { OBJ_DATA *obj; OBJ_DATA *pobj; OBJ_DATA *wobj; AFFECT_DATA *paf; char arg [ MAX_INPUT_LENGTH ]; if ( !IS_NPC( ch ) && ch->level < skill_table[gsn_bladethirst].skill_level[ch->class] ) { send_to_char( "What do you think you are, a necromancer?\n\r", ch ); return; } one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "What are you trying to do...?\n\r", ch ); return; } if ( ch->fighting ) { send_to_char( "While you're fighting? Nice try.\n\r", ch ); return; } if ( !( obj = get_obj_carry( ch, arg ) ) ) { send_to_char( "You do not have that weapon.\n\r", ch ); return; } if ( obj->item_type != ITEM_WEAPON ) { send_to_char( "That item is not a weapon.\n\r", ch ); return; } if ( IS_OBJ_STAT( obj, ITEM_BLADE_THIRST ) ) { send_to_char( "That weapon is already thirsty.\n\r", ch ); return; } /* Now we have a valid weapon...check to see if we have the bar of mithril. */ for ( pobj = ch->carrying; pobj; pobj = pobj->next_content ) { if ( pobj->pIndexData->vnum == OBJ_VNUM_MITHRIL ) break; } if ( !pobj ) { send_to_char( "You do not have the mithril.\n\r", ch ); return; } /* Okay, we have the mithril...do we have blood? */ for ( wobj = ch->carrying; wobj; wobj = wobj->next_content ) { if ( wobj->item_type == ITEM_DRINK_CON && wobj->value[1] > 0 && wobj->value[2] == 13 ) break; } if ( !wobj ) { send_to_char( "You need some blood for this skill.\n\r", ch ); return; } /* Great, we have the ingredients...but is the ch smart enough? */ if ( !IS_NPC( ch ) && get_curr_wis( ch ) < 17 ) { send_to_char( "You can't quite remember what to do...\n\r", ch ); return; } /* And does he have steady enough hands? */ if ( !IS_NPC( ch ) && ( get_curr_dex( ch ) < 17 || ch->pcdata->condition[COND_DRUNK] > 0 ) ) { send_to_char( "Your hands aren't steady enough to properly mix the ingredients.\n\r", ch ); return; } WAIT_STATE( ch, skill_table[gsn_bladethirst].beats ); /* Check the skill percentage */ if ( !IS_NPC( ch ) && number_percent( ) > ch->pcdata->learned[gsn_bladethirst] ) { send_to_char( "You failed and spill some on yourself. Ouch!\n\r", ch ); damage( ch, ch, ch->level * 2, gsn_bladethirst, WEAR_NONE ); act( "$n spills the blade thirst liquid all over!", ch, NULL, NULL, TO_ROOM ); extract_obj( pobj ); extract_obj( wobj ); return; } /* Well, I'm tired of waiting. Are you? */ act( "You mix $p in $P, creating an evil looking potion!", ch, pobj, wobj, TO_CHAR ); act( "$n mixes $p in $P, creating an evil looking potion!", ch, pobj, wobj, TO_ROOM ); act( "You pour the potion over $p, which glistens wickedly!", ch, obj, NULL, TO_CHAR ); act( "$n pours the potion over $p, which glistens wickedly!", ch, obj, NULL, TO_ROOM ); SET_BIT( obj->extra_flags, ITEM_BLADE_THIRST ); obj->cost *= ch->level; /* Set an object timer. Dont want proliferation of thirsty weapons */ obj->timer = 10 + ch->level; if ( IS_OBJ_STAT( obj, ITEM_BLESS ) ) obj->timer *= 2; if ( IS_OBJ_STAT( obj, ITEM_MAGIC ) ) obj->timer *= 2; /* WHAT? All of that, just for that one bit? How lame. ;) */ act( "The remainder of the potion eats through $p.", ch, wobj, NULL, TO_CHAR ); act( "The remainder of the potion eats through $p.", ch, wobj, NULL, TO_ROOM ); extract_obj( pobj ); extract_obj( wobj ); if ( !affect_free ) { paf = alloc_perm( sizeof( *paf ) ); } else { paf = affect_free; affect_free = affect_free->next; } paf->type = -1; paf->duration = -1; paf->location = APPLY_HITROLL; paf->modifier = 3; paf->bitvector = 0; paf->next = obj->affected; obj->affected = paf; return; }