cotn/notes/
cotn/src/
/***************************************************************************
 *  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.                                               *
 *                                                                         *
 *  Dystopia Mud improvements copyright (C) 2000, 2001 by Brian Graversen  *
 *                                                                         *
 *  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.                                                  *
 ***************************************************************************/
/***************************************************************************
 *                                 _/                            _/        *
 *      _/_/_/  _/_/      _/_/_/  _/    _/_/    _/    _/    _/_/_/         *
 *     _/    _/    _/  _/        _/  _/    _/  _/    _/  _/    _/          *
 *    _/    _/    _/  _/        _/  _/    _/  _/    _/  _/    _/           *
 *   _/    _/    _/    _/_/_/  _/    _/_/      _/_/_/    _/_/_/            *
 ***************************************************************************
 * Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius),                 *
 * Additional credits are in the help file CODECREDITS                     *
 * All Rights Reserved.                                                    *
 ***************************************************************************/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "interp.h"

void do_spiritform(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_PEACE] < 2)
        {
                send_to_char("Your not peaceful enough.\n\r", ch);
                return;
        }
        if (has_timer(ch))
                return;
        if (IS_AFFECTED(ch, AFF_ETHEREAL))
        {
                REMOVE_BIT(ch->affected_by, AFF_ETHEREAL);
                act("You regain your form and become solid.", ch, NULL, NULL,
                    TO_CHAR);
                act("$n regains $s form and becomes solid again.", ch, NULL,
                    NULL, TO_ROOM);
                return;
        }
        SET_BIT(ch->affected_by, AFF_ETHEREAL);
        act("You transform into pure spiritual matter.", ch, NULL, NULL,
            TO_CHAR);
        act("$n glows and fades into a form of pure energy.", ch, NULL, NULL,
            TO_ROOM);
        return;
}

void do_gpeace(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_PEACE] < 1)
        {
                send_to_char("Your not peaceful enough.\n\r", ch);
                return;
        }
        if (has_timer(ch))
                return;
        if (IS_AFFECTED(ch, AFF_PEACE))
        {
                REMOVE_BIT(ch->affected_by, AFF_PEACE);
                act("Time to punish the unbelievers.", ch, NULL, NULL,
                    TO_CHAR);
                act("$n looks wicked.", ch, NULL, NULL, TO_ROOM);
                return;
        }
        SET_BIT(ch->affected_by, AFF_PEACE);
        act("The almighty hand of God protects you from further harm.", ch,
            NULL, NULL, TO_CHAR);
        act("$n smiles, seems God is on $s side.", ch, NULL, NULL, TO_ROOM);
        return;
}

void do_innerpeace(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_PEACE] < 3)
        {
                send_to_char("Your not peaceful enough.\n\r", ch);
                return;
        }
        if (ch->mana < 1500)
        {
                send_to_char("You don't have enough mana.\n\r", ch);
                return;
        }
        ch->mana -= 1500;
        ch->hit += ch->pcdata->powers[ANGEL_PEACE] * 500;
        if (ch->hit > ch->max_hit)
                ch->hit = ch->max_hit;
        act("You feel the cleansing love of God run through your veins, filling you with an inner peace.", ch, NULL, NULL, TO_CHAR);
        act("$n is struck by a ray of pure light, and a blissful smile crosses $s lips.", ch, NULL, NULL, TO_ROOM);
        WAIT_STATE(ch, 18);
        return;
}

void do_houseofgod(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_PEACE] < 5)
        {
                send_to_char("Your not peaceful enough.\n\r", ch);
                return;
        }
        if (has_timer(ch))
                return;
        if (ch->pcdata->powers[ANGEL_PEACE_COUNTER] > 0)
        {
                send_to_char
                        ("It is not the time for peace yes, God want you to fight.\n\r",
                         ch);
                return;
        }
        ch->pcdata->powers[ANGEL_PEACE_COUNTER] = 50;
        ch->level = 12;
        do_peace(ch, "");
        ch->level = 3;
        act("You call for God to end this strife, and settle the dispute.",
            ch, NULL, NULL, TO_CHAR);
        act("$n says '#YDo not fight in the house of God, stand down, and pray with me!#n'.", ch, NULL, NULL, TO_ROOM);
        WAIT_STATE(ch, 24);
        return;
}

void do_angelicaura(CHAR_DATA * ch, char *argument)
{
        if (!IS_CLASS(ch, CLASS_ANGEL) || IS_NPC(ch))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_HARMONY] < 2)
        {
                send_to_char
                        ("Your not in contact with your inner harmonies.\n\r",
                         ch);
                return;
        }
        if (IS_SET(ch->pcdata->powers[ANGEL_POWERS], ANGEL_AURA))
        {
                REMOVE_BIT(ch->pcdata->powers[ANGEL_POWERS], ANGEL_AURA);
                act("Your angelic aura fades.", ch, NULL, NULL, TO_CHAR);
                act("$n looks less powerful.", ch, NULL, NULL, TO_ROOM);
                return;
        }
        SET_BIT(ch->pcdata->powers[ANGEL_POWERS], ANGEL_AURA);
        act("Your angelic auras flickers into existance.", ch, NULL, NULL,
            TO_CHAR);
        act("$n smiles, the power of God is running through $s body.", ch,
            NULL, NULL, TO_ROOM);
        return;
}

void do_gbanish(CHAR_DATA * ch, char *argument)
{
        CHAR_DATA *victim;
        CHAR_DATA *mount;
        char      buf[MAX_STRING_LENGTH];
        char      arg[MAX_INPUT_LENGTH];
        int       dam;

        argument = one_argument(argument, arg);

        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_HARMONY] < 3)
        {
                send_to_char
                        ("Your not in contact with your inner harmonies.\n\r",
                         ch);
                return;
        }
        if ((victim = get_char_room(ch, NULL, arg)) == NULL)
        {
                send_to_char("They are not here.\n\r", ch);
                return;
        }
        if (IS_NPC(victim))
        {
                send_to_char("Not on mobiles.\n\r", ch);
                return;
        }
        if (is_safe(ch, victim))
                return;
        if (victim == ch)
        {
                send_to_char("That doesn't seem like a good idea.\n\r", ch);
                return;
        }
        if (victim->alignment > 500)
        {
                send_to_char("They are not evil, you cannot punish them.\n\r",
                             ch);
                return;
        }
        if (victim->alignment > 0)
                dam = 500;
        else if (victim->alignment > -500)
                dam = 1000;
        else
                dam = 1500;
        xprintf(buf, "Your call for God to banish $N and $S is hurt [%d]",
                dam);
        act(buf, ch, NULL, victim, TO_CHAR);
        xprintf(buf, "$n calls for God to banish you, and it hurts BAD! [%d]",
                dam);
        act(buf, ch, NULL, victim, TO_VICT);
        xprintf(buf, "$n calls for God to Banish $N.");
        act(buf, ch, NULL, victim, TO_NOTVICT);
        hurt_person(ch, victim, dam);
        if (number_range(1, 10) > 7 && !in_fortress(ch))
        {
                act("$n is flung into a vortex and disappears.", victim, NULL,
                    NULL, TO_ROOM);
                char_from_room(victim);
                char_to_room(victim, get_room_index(ROOM_VNUM_HELL));
                act("$n is flung out of a vortex.", victim, NULL, NULL,
                    TO_ROOM);
                do_look(victim, "auto");
                if ((mount = victim->mount) == NULL)
                        return;
                char_from_room(mount);
                char_to_room(mount, victim->in_room);
                do_look(mount, "auto");
                return;
        }
        if (victim->position > POS_STUNNED)
        {
                if (ch->fighting == NULL)
                        set_fighting(ch, victim, TRUE);
                if (victim->fighting == NULL)
                        set_fighting(victim, ch, FALSE);
        }
        WAIT_STATE(ch, 18);
        return;
}

void do_harmony(CHAR_DATA * ch, char *argument)
{
        CHAR_DATA *victim;
        char      arg[MAX_INPUT_LENGTH];
        int       sn, level;

        argument = one_argument(argument, arg);

        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_HARMONY] < 5)
        {
                send_to_char
                        ("Your not in contact with your inner harmonies.\n\r",
                         ch);
                return;
        }
        if ((victim = get_char_room(ch, NULL, arg)) == NULL)
        {
                send_to_char("They are not here.\n\r", ch);
                return;
        }
        level = number_range(100, 200);
        sn = skill_lookup("spirit kiss");
        if (sn > 0)
                (*skill_table[sn].spell_fun) (sn, level, ch, victim);
        WAIT_STATE(ch, 12);
        return;
}

void do_gsenses(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_LOVE] < 1)
        {
                send_to_char
                        ("God does not love you enough to grant you sight.\n\r",
                         ch);
                return;
        }
        if (IS_SET(ch->act, PLR_HOLYLIGHT))
        {
                REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
                send_to_char("Your holy vision fades.\n\r", ch);
        }
        else
        {
                SET_BIT(ch->act, PLR_HOLYLIGHT);
                send_to_char("You see through God's own eyes.\n\r", ch);
        }
        return;
}

void do_gfavor(CHAR_DATA * ch, char *argument)
{
        char      buf[MAX_STRING_LENGTH];

        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_LOVE] < 2)
        {
                send_to_char
                        ("God does not love you enough to grant his divine favor.\n\r",
                         ch);
                return;
        }
        if (ch->alignment != 1000)
                ch->alignment = 1000;
        if (IS_SET(ch->newbits, NEW_CUBEFORM))
        {
                REMOVE_BIT(ch->newbits, NEW_CUBEFORM);
                REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
                act("$n turns into a human.", ch, NULL, NULL, TO_ROOM);
                send_to_char("You turn into your normal form.\n\r", ch);
                ch->damroll -= 400;
                ch->hitroll -= 400;
                free_string(ch->morph);
                ch->morph = str_dup("");
                return;
        }
        if (ch->move < 2000 || ch->mana < 2000)
        {
                send_to_char
                        ("You need 2000 mana and 2000 move to make yourself a true angel.\n\r",
                         ch);
                return;
        }
        else
        {
                act("$n transforms into an angel.", ch, NULL, NULL, TO_ROOM);
                send_to_char
                        ("God is with you, your now one of his divine.\n\r",
                         ch);
                SET_BIT(ch->newbits, NEW_CUBEFORM);
                SET_BIT(ch->affected_by, AFF_POLYMORPH);
                xprintf(buf, "%s the angel", ch->name);
                free_string(ch->morph);
                ch->morph = str_dup(buf);
                ch->move -= 2000;
                ch->mana -= 2000;
                ch->damroll += 400;
                ch->hitroll += 400;
                return;
        }
        return;
}

void do_forgivness(CHAR_DATA * ch, char *argument)
{
        CHAR_DATA *victim;
        char      arg[MAX_INPUT_LENGTH];

        argument = one_argument(argument, arg);

        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_LOVE] < 3)
        {
                send_to_char("Your are not loving enough.\n\r", ch);
                return;
        }
        if ((victim = get_char_room(ch, NULL, arg)) == NULL)
        {
                send_to_char("They are not here.\n\r", ch);
                return;
        }
        if (IS_NPC(victim))
        {
                send_to_char("Not on mobiles.\n\r", ch);
                return;
        }
        if (is_safe(ch, victim))
                return;
        if (victim == ch)
        {
                send_to_char("You haven't sinned, why seek forgivness ??\n\r",
                             ch);
                return;
        }
        if (IS_CLASS(ch, CLASS_TANARRI))
        {
                send_to_char
                        ("You cannot forgive a creature of utter evil.\n\r",
                         ch);
                return;
        }
        if (victim->alignment < 0)
        {
                send_to_char
                        ("They are not ready to seek forgivness, first they must repent.\n\r",
                         ch);
                return;
        }
        victim->hit += number_range(1000, 1500);
        if (victim->hit > victim->max_hit)
                victim->hit = victim->max_hit;
        act("You feel the cleansing love of God run through your veins, filling you with an inner peace.", victim, NULL, NULL, TO_CHAR);
        act("$n is struck by a ray of pure light, and a blissful smile crosses $s lips.", victim, NULL, NULL, TO_ROOM);
        send_to_char
                ("You forgive them, and thus God forgives them for their sins.\n\r",
                 ch);
        WAIT_STATE(ch, 16);
        return;
}

void do_martyr(CHAR_DATA * ch, char *argument)
{
        CHAR_DATA *ich;

        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_LOVE] < 5)
        {
                send_to_char
                        ("Your love for mortals are not strong enough.\n\r",
                         ch);
                return;
        }
        if (ch->hit < ch->max_hit)
        {
                send_to_char("Your body cannot take the strain.\n\r", ch);
                return;
        }
        if (has_timer(ch))
                return;
        ch->level = 12;
        act("You call for God to transfer the pain of these mortals to yourself.", ch, NULL, NULL, TO_CHAR);
        act("$n says '#YLet not these followers of God suffer, let their pain be mine instead#n'.", ch, NULL, NULL, TO_ROOM);
        for (ich = ch->in_room->people; ich != NULL; ich = ich->next_in_room)
                if (!IS_NPC(ich))
                        do_restore(ch, ich->pcdata->switchname);
        ch->level = 3;
        ch->hit = 1;
        ch->move = 1;
        ch->mana = 1;
        WAIT_STATE(ch, 6);
        return;
}

void do_swoop(CHAR_DATA * ch, char *argument)
{
        char      arg[MAX_INPUT_LENGTH];
        ROOM_INDEX_DATA *location;
        CHAR_DATA *victim;

        one_argument(argument, arg);
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_JUSTICE] < 1)
        {
                send_to_char("You haven't learned to fly yet.\n\r", ch);
                return;
        }
        if (!IS_SET(ch->pcdata->powers[ANGEL_POWERS], ANGEL_WINGS))
        {
                send_to_char("Where are your wings?\n\r", ch);
                return;
        }
        if ((victim = get_char_world(ch, arg)) == NULL)
        {
                send_to_char("Swoop down on whom?\n\r", ch);
                return;
        }
        if (IS_SET(victim->in_room->room_flags, ROOM_ASTRAL))
        {
                stc("You can't find it's room.\n\r", ch);
                return;
        }
 if (IS_AFFECTED(ch, AFF_ETHEREAL))
        {
 stc("not while ethereal.\n\r", ch);
                return;
        }

        if (IS_IMMUNE(victim, IMM_TRAVEL) && !IS_NPC(victim))
        {
                send_to_char("I don't think they want you to do that.\n\r",
                             ch);
                return;
        }
        if (IS_SET(ch->in_room->room_flags, ROOM_ASTRAL))
        {
                stc("Your room is not connected to the astral plane.\n\r",
                    ch);
                return;
        }
        if (IS_SET(victim->act, ACT_NOTRAVEL))
        {
                send_to_char("No Can Do.\n\r", ch);
                return;
        }
        location = victim->in_room;
        if (ch->move < 500)
        {
                send_to_char("You don't have the move to fly that far.\n\r",
                             ch);
                return;
        }
        act("You fly up into the sky.", ch, NULL, NULL, TO_CHAR);
        act("$n flies into the sky.", ch, NULL, NULL, TO_ROOM);
        ch->move -= 500;
        char_from_room(ch);
        char_to_room(ch, location);
        do_look(ch, "auto");
        act("You swoop down upon $N.", ch, NULL, victim, TO_CHAR);
        act("$n swoops down from the sky.", ch, NULL, NULL, TO_ROOM);
        return;
}

void do_touchofgod(CHAR_DATA * ch, char *argument)
{
        CHAR_DATA *victim;
        char      arg[MAX_INPUT_LENGTH];
        int       dam;

        argument = one_argument(argument, arg);
        dam = number_range(100, 200);

        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_JUSTICE] < 4)
        {
                send_to_char("You cannot channel the will of God yet.\n\r",
                             ch);
                return;
        }
        if ((victim = get_char_room(ch, NULL, arg)) == NULL)
        {
                send_to_char("They are not here.\n\r", ch);
                return;
        }
        if (IS_NPC(victim))
        {
                send_to_char("Not on mobiles.\n\r", ch);
                return;
        }
        if (is_safe(ch, victim))
                return;
        if (victim == ch)
        {
                send_to_char("That doesn't seem like a good idea.\n\r", ch);
                return;
        }
        WAIT_STATE(ch, 18);
        hurt_person(ch, victim, dam);
        act("You grab $N by the forehead and channel God's justice into $S body.", ch, NULL, victim, TO_CHAR);
        act("$n grabs you by your forehead and sends a prayer to God, DAMN THAT HURT.", ch, NULL, victim, TO_VICT);
        act("$n grabs $N by the forehead and sends a prayer to God.", ch,
            NULL, victim, TO_NOTVICT);
        if (number_range(1, 3) == 1)
        {
                if (victim->position == POS_FIGHTING)
                        stop_fighting(victim, TRUE);
                act("$N screams in pain and drops to the ground as God's justice wrecks $S body.", ch, NULL, victim, TO_CHAR);
                act("AARGH!!! The pain is to much, you drop to the ground.",
                    ch, NULL, victim, TO_VICT);
                act("$N screams in agony and falls to the ground.", ch, NULL,
                    victim, TO_NOTVICT);
                victim->position = POS_STUNNED;
        }
        return;
}

void do_awings(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_JUSTICE] < 1)
        {
                send_to_char("Your don't have wings yet.\n\r", ch);
                return;
        }
        if (IS_SET(ch->pcdata->powers[ANGEL_POWERS], ANGEL_WINGS))
        {
                REMOVE_BIT(ch->pcdata->powers[ANGEL_POWERS], ANGEL_WINGS);
                act("You fold your wings back into your body.", ch, NULL,
                    NULL, TO_CHAR);
                act("$n fold $s wings back into $s body.", ch, NULL, NULL,
                    TO_ROOM);
                return;
        }
        SET_BIT(ch->pcdata->powers[ANGEL_POWERS], ANGEL_WINGS);
        act("You spread your wings.", ch, NULL, NULL, TO_CHAR);
        act("$n spread $s wings.", ch, NULL, NULL, TO_ROOM);
        return;
}

void do_halo(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_JUSTICE] < 2)
        {
                send_to_char("You haven't gotten your halo yet.\n\r", ch);
                return;
        }
        if (IS_SET(ch->pcdata->powers[ANGEL_POWERS], ANGEL_HALO))
        {
                REMOVE_BIT(ch->pcdata->powers[ANGEL_POWERS], ANGEL_HALO);
                act("Your halo flickers and disappears.", ch, NULL, NULL,
                    TO_CHAR);
                act("$n's halo flickers and disappears.", ch, NULL, NULL,
                    TO_ROOM);
                return;
        }
        SET_BIT(ch->pcdata->powers[ANGEL_POWERS], ANGEL_HALO);
        act("A halo appears over your head.", ch, NULL, NULL, TO_CHAR);
        act("A halo appears over $n's head.", ch, NULL, NULL, TO_ROOM);
        return;
}

void do_sinsofthepast(CHAR_DATA * ch, char *argument)
{
        CHAR_DATA *victim;
        char      arg[MAX_INPUT_LENGTH];

        argument = one_argument(argument, arg);

        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_JUSTICE] < 3)
        {
                send_to_char("Your not ready to punish the sinners.\n\r", ch);
                return;
        }
        if ((victim = get_char_room(ch, NULL, arg)) == NULL)
        {
                send_to_char("They are not here.\n\r", ch);
                return;
        }
        if (IS_NPC(victim))
        {
                send_to_char("Not on mobiles.\n\r", ch);
                return;
        }
        if (is_safe(ch, victim))
                return;
        if (victim == ch)
        {
                send_to_char("That doesn't seem like a good idea.\n\r", ch);
                return;
        }
        if (IS_CLASS(victim, CLASS_ANGEL))
        {
                send_to_char
                        ("Angels are born without sin, they are perfect creatures.\n\r",
                         ch);
                return;
        }
        send_to_char("#RYou burn them with the fires of hell!#n\n\r", ch);
        if (!IS_AFFECTED(victim, AFF_FLAMING))
                SET_BIT(victim->affected_by, AFF_FLAMING);
        send_to_char("#LTheir body is wrecked by poison!#n\n\r", ch);
        if (!IS_AFFECTED(victim, AFF_POISON))
                SET_BIT(victim->affected_by, AFF_POISON);
        send_to_char
                ("#CGod's fury upon them for they have truly sinned!!!#n\n\r",
                 ch);
        one_hit(ch, victim, gsn_wrathofgod, 1);
        WAIT_STATE(ch, 12);
        return;
}

void do_eyeforaneye(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;
        if (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[ANGEL_JUSTICE] < 5)
        {
                send_to_char("Your not ready to punish the sinners.\n\r", ch);
                return;
        }
        if (IS_SET(ch->pcdata->powers[ANGEL_POWERS], ANGEL_EYE))
        {
                REMOVE_BIT(ch->pcdata->powers[ANGEL_POWERS], ANGEL_EYE);
                act("The sinners have paid for their sin, you send a prayer of thanks to God.", ch, NULL, NULL, TO_CHAR);
                act("$n's prays to $s god, thanking for the opportunity to punish the sinners.", ch, NULL, NULL, TO_ROOM);
                return;
        }
        SET_BIT(ch->pcdata->powers[ANGEL_POWERS], ANGEL_EYE);
        act("#CTime to punish the wicked and the sinful.#n", ch, NULL, NULL,
            TO_CHAR);
        act("$n grins wickedly, and a smile of pleasure crosses $s lips.", ch,
            NULL, NULL, TO_ROOM);
        return;
}

void do_angelicarmor(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 (!IS_CLASS(ch, CLASS_ANGEL))
        {
                send_to_char("What?\n\r", ch);
                return;
        }
        if (arg[0] == '\0')
        {
                send_to_char
                        ("Please specify which piece of angel armor you wish to make: Sword Bracer\n\r"
                         "Necklace Ring Plate Helmet Leggings Boots Gauntlets Sleeves Cloak Belt Visor.\n\r",
                         ch);
                return;
        }
        if (ch->practice < 100)
        {
                send_to_char
                        ("It costs 100 points of primal to create angel equipment.\n\r",
                         ch);
                return;
        }
        if (!str_cmp(arg, "sword"))
                vnum = 33192;
        else if (!str_cmp(arg, "bracer"))
                vnum = 33181;
        else if (!str_cmp(arg, "necklace"))
                vnum = 33182;
        else if (!str_cmp(arg, "ring"))
                vnum = 33180;
        else if (!str_cmp(arg, "plate"))
                vnum = 33187;
        else if (!str_cmp(arg, "helmet"))
                vnum = 33184;
        else if (!str_cmp(arg, "leggings"))
                vnum = 33188;
        else if (!str_cmp(arg, "boots"))
                vnum = 33189;
        else if (!str_cmp(arg, "gauntlets"))
                vnum = 33190;
        else if (!str_cmp(arg, "sleeves"))
                vnum = 33191;
        else if (!str_cmp(arg, "cloak"))
                vnum = 33185;
        else if (!str_cmp(arg, "belt"))
                vnum = 33183;
        else if (!str_cmp(arg, "visor"))
                vnum = 33186;
        else
        {
                do_angelicarmor(ch, "");
                return;
        }
        if (vnum == 0 || (pObjIndex = get_obj_index(vnum)) == NULL)
        {
                send_to_char("Missing object, please inform a God.\n\r", ch);
                return;
        }
        obj = create_object(pObjIndex, 50);
        obj->questowner = str_dup(ch->pcdata->switchname);
        obj->ownerid = ch->pcdata->playerid;
        obj_to_char(obj, ch);
        ch->practice -= 100;
        act("$p appears in your hands.", ch, obj, NULL, TO_CHAR);
        act("$p appears in $n's hands.", ch, obj, NULL, TO_ROOM);
        return;
}