/**************************************************************************** * 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. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. 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. * ***************************************************************************/ /**************************************************************************** * ROM 2.4 is copyright 1993-1998 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@hypercube.org) * * Gabrielle Taylor (gtaylor@hypercube.org) * * Brian Moore (zump@rom.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * ***************************************************************************/ /**************************************************************************** * Demon's Dance MUD, and source code are property of Eric Goetschalckx * * By compiling this code, you agree to include the following in your * * login screen: * * Derivative of Demon's Dance, by Enzo/Stan * ***************************************************************************/ /* * Zealot Skill File */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" #include "arena.h" #include "interp.h" #include "tables.h" #include "olc.h" #include "recycle.h" #include "lookup.h" #include "magic.h" void do_smite( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; one_argument( argument, arg ); if (arg[0] == '\0') { victim = ch->fighting; if (victim == NULL) { send_to_char("But you aren't fighting anyone!\n\r",ch); return; } } else if ((victim = get_char_room(ch, NULL, arg)) == NULL) { send_to_char("They aren't here.\n\r",ch); return; } if ( is_safe( ch, victim ) ) return; if (!know_skill(ch,"smite")) return; if (IS_NPC(victim) && victim->fighting != NULL && !is_same_group(ch,victim->fighting) && !is_arena(victim)) { send_to_char("Kill stealing is not permitted.\n\r",ch); return; } check_killer( ch, victim ); WAIT_STATE( ch, skill_table[gsn_smite].beats ); if ( number_percent( ) < get_skill(ch,gsn_smite) || ( get_skill(ch,gsn_smite) >= 2 && !IS_AWAKE(victim) ) ) { check_improve(ch,gsn_smite,TRUE,1); one_hit( ch, victim, gsn_smite, FALSE,FALSE ); } else { check_improve(ch,gsn_smite,FALSE,1); damage( ch, victim, 0, gsn_smite,DAM_NONE,TRUE,FALSE); } return; } void spell_holy_armor(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *victim = (CHAR_DATA *) vo; AFFECT_DATA af; if (victim != ch) { stc("You may only encase yourself in a set of {Dh{wo{Wl{Yy ar{Wm{wo{Dr{x\r\n",ch); return; } if (IS_AFFECTED2(victim, AFF_HOLY_ARMOR)) { if (victim == ch) send_to_char("You are already encased in {Dh{wo{Wl{Yy ar{Wm{wo{Dr{x\r\n", ch); else act("$N is already encased in {Dh{wo{Wl{Yy ar{Wm{wo{Dr{x",ch,NULL,victim,TO_CHAR); return; } af.where = TO_AFFECTS2; af.type = sn; af.level = level; af.duration = level/6; af.location = APPLY_AC; af.modifier = -200; af.bitvector = AFF_HOLY_ARMOR; affect_to_char(victim, &af); act("$n is encased in {Dh{wo{Wl{Yy ar{Wm{wo{Dr{x",victim, NULL,NULL,TO_ROOM); send_to_char("You are encased in {Dh{wo{Wl{Yy ar{Wm{wo{Dr{x\n\r", victim); return; } void spell_divine_right( int sn, int level, CHAR_DATA *ch, void *vo,int target) { CHAR_DATA *victim = (CHAR_DATA *) vo; AFFECT_DATA af; if (victim != ch) { stc("You can only give yourself the divine right to combat\n\r",ch); return; } if ( is_affected( victim, sn ) ) { send_to_char("You already have the divine right to combat\n\r",ch); return; } if (IS_AFFECTED2(victim, AFF_DIVINE_RIGHT)) { send_to_char("You already have the divine right to combat\n\r",ch); return; } af.where = TO_AFFECTS2; af.type = sn; af.level = level; af.duration = level/2; af.location = APPLY_HIT; af.modifier = level * 5; af.bitvector = AFF_DIVINE_RIGHT; affect_to_char( ch, &af ); send_to_char( "Your god has given you the right to combat\n\r", ch ); act("$n has recieved the right to combat from $s god.",ch,NULL,NULL,TO_ROOM); return; } void spell_greater_healing( int sn, int level, CHAR_DATA *ch, void *vo,int target ) { CHAR_DATA *victim = (CHAR_DATA *) vo; victim->hit = UMIN( victim->hit + 700, victim->max_hit ); update_pos( victim ); send_to_char( "The powers of greater healing knit your wounds\n\r", victim ); if ( ch != victim ) send_to_char( "Ok.\n\r", ch ); return; } void spell_fanatic_flame( int sn, int level, CHAR_DATA *ch, void *vo, int target) { OBJ_DATA *obj; AFFECT_DATA af; /* deal with the object case first */ if (target == TARGET_OBJ) { obj = (OBJ_DATA *) vo; if (obj->item_type != ITEM_WEAPON) { act("$p is not a weapon, and cannot be given the fanatic's flame",ch,obj,NULL,TO_CHAR); return; } if (IS_WEAPON_STAT(obj,WEAPON_FLAMING)) { act("$p already is a flaming weapon",ch,obj,NULL,TO_CHAR); return; } af.where = TO_WEAPON; af.type = sn; af.level = ch->level; af.duration = 40 + level; af.location = 0; af.modifier = 0; af.bitvector = WEAPON_FLAMING; affect_to_obj(obj,&af); act("$p lights up with a {rf{Ra{yn{Ya{Wt{Yi{yc{Ra{rl {rf{yl{Ya{ym{re{x",ch,obj,NULL,TO_ALL); return; } else return; } void spell_heavenly_justice (int sn, int level, CHAR_DATA *ch, void *vo,int target) { CHAR_DATA *victim = (CHAR_DATA *) vo; int dam; if (victim != ch) { act("$n raises $s hand, and a thunder clap is heard as $e calls upon Heaven's Justice", ch,NULL,NULL,TO_ROOM); send_to_char( "You raise your hand and a thunder clap echos as you call upon Heaven's Justice\n\r", ch); } dam = number_range(ch->level, ch->level/2 * 100); if ( saves_spell( level, victim,DAM_HOLY) ) dam /= 2; damage( ch, victim, dam, sn, DAM_HOLY ,TRUE,FALSE); spell_blindness(gsn_blindness, 3 * level / 4, ch, (void *) victim,TARGET_CHAR); } void spell_judgement( int sn, int level, CHAR_DATA *ch, void *vo,int target ) { CHAR_DATA *victim = (CHAR_DATA *) vo; int dam; if (IS_GOOD(ch)) { act( "$n {Wcalls upon the strength of the heavens{x.", ch, NULL, NULL, TO_ROOM ); send_to_char( "You call upon the strength of the heavens{x.\n\r", ch ); dam = (ch->level * 4) + dice(25, 35); damage( ch, victim, dam, sn, DAM_HOLY ,TRUE,FALSE); } else if (IS_EVIL(ch)) { act( "$n {Wcalls upon the powers of darkness{x.", ch, NULL, NULL, TO_ROOM ); send_to_char( "You call upon the powers of darkness{x.\n\r", ch ); dam = (ch->level * 4) + dice(25, 35); damage( ch, victim, dam, sn, DAM_NEGATIVE ,TRUE,FALSE); } else if (IS_NEUTRAL(ch)) { act( "$n {Wcalls upon the forces of balance{x.", ch, NULL, NULL, TO_ROOM ); send_to_char( "You call upon the forces of balance{x.\n\r", ch ); dam = (ch->level * 4) + dice(10, 35); damage( ch, victim, dam, sn, DAM_NONE ,TRUE, FALSE); } }