1stMud/CVS/
1stMud/area/CVS/
1stMud/backup/CVS/
1stMud/bin/
1stMud/bin/CVS/
1stMud/bin/extras/
1stMud/bin/extras/CVS/
1stMud/data/CVS/
1stMud/data/i3/CVS/
1stMud/doc/1stMud/
1stMud/doc/1stMud/CVS/
1stMud/doc/CVS/
1stMud/doc/Diku/
1stMud/doc/Diku/CVS/
1stMud/doc/MPDocs/CVS/
1stMud/doc/Merc/CVS/
1stMud/doc/Rom/
1stMud/doc/Rom/CVS/
1stMud/log/CVS/
1stMud/notes/
1stMud/notes/CVS/
1stMud/player/CVS/
1stMud/player/backup/CVS/
1stMud/player/deleted/CVS/
1stMud/src/CVS/
1stMud/src/config/CVS/
1stMud/src/h/CVS/
1stMud/src/o/CVS/
1stMud/win/CVS/
/**************************************************************************
*  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.                              *
*                                                                         *
*  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          *
*  benefiting.  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                    *
***************************************************************************
*          1stMud ROM Derivative (c) 2001-2004 by Markanth                *
*            http://www.firstmud.com/  <markanth@firstmud.com>            *
*         By using this code you have agreed to follow the term of        *
*             the 1stMud license in ../doc/1stMud/LICENSE                 *
***************************************************************************/


#include "merc.h"
#include "magic.h"
#include "interp.h"

const struct healer_type
{
  char *name;
  char *descr;
  Spell_F *spell;
  char *words;
  money_t cost;
}
healer_table[] =
{
  {
  "light", "cure light wounds", spell_cure_light, "judicandus dies", 10}
  ,
  {
  "serious", "cure serious wounds", spell_cure_serious,
      "judicandus gzfuajg", 16}
  ,
  {
  "critical", "cure critical wounds", spell_cure_critical,
      "judicandus qfuhuqar", 25}
  ,
  {
  "heal", "healing spell", spell_heal, "pzar", 50}
  ,
  {
  "blindness", "cure blindness", spell_cure_blindness,
      "judicandus noselacri", 20}
  ,
  {
  "disease", "cure disease", spell_cure_disease, "judicandus eugzagz", 15}
  ,
  {
  "poison", "cure poison", spell_cure_poison, "judicandus sausabru", 25}
  ,
  {
  "uncurse", "remove a curse", spell_remove_curse, "candussido judifgz", 50}
  ,
  {
  "refresh", "restore movement", spell_refresh, "candusima", 5}
  ,
  {
  "mana", "restore mana", NULL, "energizer", 10}
  ,
  {
  NULL, NULL, NULL, 0}
};

Do_Fun (do_heal)
{
  CharData *mob;
  char arg[MAX_INPUT_LENGTH];
  int sn, i;


  for (mob = ch->in_room->person_first; mob; mob = mob->next_in_room)
    {
      if (IsNPC (mob) && IsSet (mob->act, ACT_IS_HEALER))
	break;
    }

  if (mob == NULL)
    {
      chprintln (ch, "You can't do that here.");
      return;
    }

  one_argument (argument, arg);

  if (NullStr (arg))
    {

      act ("$N says 'I offer the following spells:'", ch, NULL, mob, TO_CHAR);
      for (i = 0; healer_table[i].name != NULL; i++)
	chprintlnf (ch, "\t%12s: %24s %ld gold", healer_table[i].name,
		    healer_table[i].descr, healer_table[i].cost);
      chprintln (ch, "\tType heal <type> to be healed.");
      return;
    }

  for (i = 0; healer_table[i].name != NULL; i++)
    {
      if (!str_prefix (arg, healer_table[i].name))
	break;
    }

  if (healer_table[i].name == NULL)
    {
      act ("$N says 'Type 'heal' for a list of spells.'", ch, NULL, mob,
	   TO_CHAR);
      return;
    }

  if (!check_worth (ch, healer_table[i].cost, VALUE_GOLD))
    {
      act ("$N says 'You do not have enough gold for my services.'", ch,
	   NULL, mob, TO_CHAR);
      return;
    }

  WaitState (ch, PULSE_VIOLENCE);

  deduct_cost (ch, healer_table[i].cost, VALUE_GOLD);
  add_cost (mob, healer_table[i].cost, VALUE_GOLD);
  act ("$n utters the words '$T'.", mob, NULL, healer_table[i].words,
       TO_ROOM);

  if (healer_table[i].spell == NULL)
    {
      ch->mana += dice (2, 8) + mob->level / 3;
      ch->mana = Min (ch->mana, ch->max_mana);
      chprintln (ch, "A warm glow passes through you.");
      return;
    }

  if ((sn = spell_lookup (healer_table[i].spell)) == -1)
    return;

  (*healer_table[i].spell) (sn, mob->level, mob, ch, TARGET_CHAR);
}