/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments 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. * * * * In order to use any part of this Envy Diku Msud, 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. * ***************************************************************************/ /*$Id: cls_asn.c,v 1.9 2005/03/17 02:41:08 tyrion Exp $*/ #if defined( macintosh ) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <time.h> #include "merc.h" extern void check_killer args( ( CHAR_DATA *ch, CHAR_DATA *victim ) ); extern char* target_name; int skill_death_strike( int sn, int level, CHAR_DATA *ch, void *vo ) { int dmg = 0; CHAR_DATA *victim; if ( ch->fighting ) { victim = ch->fighting; /* While fighting attack */ if ( ( victim->hit * 100 / victim->max_hit <= 15 ) && ( number_percent( ) <= 15 + get_curr_dex( ch ) - get_curr_dex( victim ) ) ) { //damage( ch, victim, number_range( ch->level*100, ch->level*120 ), gsn_death_strike ); dmg = number_range(ch->level * 100, ch->level * 120 ); WAIT_STATE( ch, skill_table[sn].beats ); WAIT_STATE( ch, skill_table[sn].beats ); } else { //damage( ch, victim, number_range( ch->level*10, ch->level*12 ), gsn_death_strike ); dmg = number_range(ch->level * 10, ch->level*12); WAIT_STATE( ch, skill_table[sn].beats ); } return dmg; } if ( target_name[0] == '\0' ) { send_to_char(C_DEFAULT, "Deathstrike whom?\n\r", ch ); return SKPELL_BOTCHED; } if ( !( victim = get_char_room( ch, target_name ) ) ) { send_to_char(C_DEFAULT, "They aren't here.\n\r", ch ); return SKPELL_BOTCHED; } if ( victim == ch ) { send_to_char(C_DEFAULT, "You can't do that to yourself.\n\r", ch ); return SKPELL_BOTCHED; } if ( !is_pkillable( ch, victim ) ) { return SKPELL_MISSED; } if ( IS_AFFECTED2( ch, AFF_SHADOW_PLANE )) { send_to_char(AT_WHITE, "You must leave the shadow realm.\n\r", ch); return SKPELL_BOTCHED; } if ( IS_AFFECTED4( ch, AFF_BURROW )) { send_to_char(AT_WHITE, "You must wait until the earth heals you.\n\r", ch); return SKPELL_BOTCHED; } if ( IS_AFFECTED2( victim, AFF_SHADOW_PLANE )) { send_to_char(AT_WHITE, "You can not attack someone who is in the shadow plane.\n\r", ch); return SKPELL_BOTCHED; } if ( IS_AFFECTED4( victim, AFF_BURROW )) { send_to_char(AT_WHITE, "You can not attack someone who is burrowed.\n\r", ch); return SKPELL_BOTCHED; } if ( IS_AFFECTED( victim, AFF_PEACE ) ) { send_to_char(AT_WHITE, "A wave of peace overcomes you.\n\r", ch); return SKPELL_BOTCHED; } if( IS_NPC( ch ) ) { send_to_char(AT_WHITE, "You can not perform that skill.\n\r", ch ); return SKPELL_MISSED; } if (!IS_NPC(victim)) ch->pkill_timer = 0; check_killer( ch, victim ); WAIT_STATE( ch, skill_table[sn].beats ); if ( ( victim->hit * 100 / victim->max_hit <= 15 ) && ( number_percent( ) <= 15 + get_curr_dex( ch ) - get_curr_dex( victim ) ) ) { /* Death Strike, Double Wait State */ //damage( ch, victim, number_range( ch->level*200, ch->level*240 ), gsn_death_strike ); dmg = number_range(ch->level * 200, ch->level*240); WAIT_STATE( ch, skill_table[sn].beats ); } else { /* Damage attack */ //damage( ch, victim, number_range( ch->level*10, ch->level*12 ), gsn_death_strike ); dmg = number_range(ch->level * 10, ch->level*12); } return dmg; } int spell_deception_of_aura( int sn, int level, CHAR_DATA *ch, void *vo ) { if ( is_affected(ch,sn) ) { affect_strip( ch, sn ); REMOVE_BIT(ch->affected_by4, AFF_DECEPTION); send_to_char(AT_RED, "You drop your mental defenses.\n\r", ch); return SKPELL_NO_DAMAGE; } if (number_percent() <= ((number_fuzzy(ch->pcdata->learned[sn])/20) + get_curr_int( ch ))) { AFFECT_DATA af; int level = ch->level; af.type = sn; af.level = level; if (!str_cmp(ch->name,"Aura")) { af.duration = -1; af.location = APPLY_DEX; af.modifier = 6; } else { af.duration = level/4; af.location = APPLY_NONE; af.modifier = 0; } af.bitvector = AFF_DECEPTION; affect_to_char4(ch , &af); send_to_char(AT_WHITE,"You succeed in imagining that you are somewhere else.\n\r",ch); } else { send_to_char(AT_WHITE,"You are unable to partition your mind!\n\r",ch); } WAIT_STATE( ch, skill_table[sn].beats); return SKPELL_NO_DAMAGE; }