legend/
legend/area/
legend/player/
/***************************************************************************
 *  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.                                                  *
 ***************************************************************************/
/***************************************************************************
 *  God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock        *
 *                                                                         *
 *  Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little *
 *  This mud is NOT to be copied in whole or in part, or to be run without *
 *  the permission of Matthew Little. Nobody else has permission to        *
 *  authorise the use of this code.                                        *
 ***************************************************************************/

#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"



void do_pset (CHAR_DATA * ch, char *argument)
{
   char arg1[MAX_INPUT_LENGTH];
   char arg2[MAX_INPUT_LENGTH];
   char arg3[MAX_INPUT_LENGTH];
   char arg4[MAX_INPUT_LENGTH];
   char buf[MAX_STRING_LENGTH];
   CHAR_DATA *victim;
   int value;
   int i;
   sprintf (buf, "%s: Pset %s", ch->name, argument);
   if (ch->level < NO_WATCH)
      do_watching (ch, buf);

   smash_tilde (argument);
   argument = one_argument (argument, arg1);
   argument = one_argument (argument, arg2);
   argument = one_argument (argument, arg3);
   strcpy (arg4, argument);

   if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0')
   {
      send_to_char ("Syntax: pset <victim> <area> <field> <value>\n\r", ch);
      send_to_char ("\n\r", ch);
      send_to_char ("Area being one of:\n\r", ch);
      send_to_char ("  quest quest+ quest- weapon immune beast\n\r", ch);
      send_to_char ("  blue red yellow green purple spellall\n\r", ch);
      send_to_char ("  mongoose crane crab viper bull mantis stanceall\n\r",
		    ch);
      send_to_char ("  dragon tiger monkey swallow \n\r", ch);
      send_to_char ("  aura dps status status+ status- spouse legend\n\r",
		    ch);
      send_to_char ("  pkills pdeaths mkills mdeaths akills adeaths\n\r", ch);
      send_to_char ("  recall kingrank\n\r", ch);
      send_to_char ("\n\r", ch);
      send_to_char ("Field being one of:\n\r", ch);
      send_to_char ("Weapon:  slice stab slash whip claw blast   \n\r", ch);
      send_to_char ("Weapon:  pound crush grep bite pierce suck \n\r", ch);
      send_to_char ("Immune:  slash stab smash animal misc charm\n\r", ch);
      send_to_char ("Immune:  heat cold acid summon voodoo \n\r", ch);
      send_to_char ("Immune:  hurl backstab shielded kick disarm\n\r", ch);
      send_to_char ("Immune:  steal sleep drain sunlight\n\r", ch);
      send_to_char ("         all\n\r", ch);
      send_to_char ("\n\rSpecial being one of:\n\r", ch);
      send_to_char ("   married ftalk testchar roomflags channel\n\r", ch);
      send_to_char ("   whine dcolor map outcast newbiehelper\n\r", ch);
      return;
   }

   if ((victim = get_char_world (ch, arg1)) == NULL)
   {
      send_to_char ("They aren't here.\n\r", ch);
      return;
   }

   if (IS_SET (victim->act, PLR_GODLESS) && ch->level < NO_GODLESS)
   {
      send_to_char ("You failed.\n\r", ch);
      return;
   }

   /*
    * Snarf the value (which need not be numeric).
    */
   value = is_number (arg3) ? atoi (arg3) : 5;

   /*
    * Set something.
    */
   if (!str_cmp (arg2, "special"))
   {
      if (!str_cmp (arg3, "dcolor"))
      {
	 if (IS_NPC (victim))
	 {
	    stc ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (!IS_CLASS (victim, CLASS_DRAGON))
	 {
	    stc ("They are not a dragon, they dont need a Dragon COlor!\n\r",
		 ch);
	    return;
	 }
	 victim->pcdata->disc_a[DRAGON_COLOR] = number_range (1, 9);
	 stc ("You change their color\n\r", ch);
	 return;
      }
      if (!str_cmp (arg3, "map"))
      {
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (IS_SET (victim->extra2, MAP))
	 {
	    send_to_char ("Removed.\n\r", ch);
	    REMOVE_BIT (victim->extra2, MAP);
	 }
	 else
	 {
	    send_to_char (" Set.\n\r", ch);
	    SET_BIT (victim->extra2, MAP);
	 }
	 return;
      }
      if (!str_cmp (arg3, "favor"))
      {
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (IS_SET (victim->act, PLR_RIGHTHAND))
	 {
	    send_to_char ("Removed.\n\r", ch);
	    REMOVE_BIT (victim->act, PLR_RIGHTHAND);
	 }
	 if (IS_SET (victim->act, PLR_LEFTHAND))
	 {
	    send_to_char ("Removed.\n\r", ch);
	    REMOVE_BIT (victim->act, PLR_LEFTHAND);
	 }
	 stc ("You are now able to set your favor again!\n\r", victim);
	 return;
      }
      if (!str_cmp (arg3, "newbiehelper"))
      {
	 if (!IS_CREATOR (ch))
	 {
	    stc ("You cannot do that!\n\r", ch);
	    return;
	 }
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (IS_SET (victim->extra2, NHELPER))
	 {
	    send_to_char ("Removed.\n\r", ch);
	    REMOVE_BIT (victim->extra2, NHELPER);
	 }
	 else
	 {
	    send_to_char (" Set.\n\r", ch);
	    send_to_char
	       ("You are now a designated NEWBIE HELPER\n\rThis means you are now unable to be PKilled, or PKill\n\rThis is IRREVERSIBLE\n\r",
		victim);
	    SET_BIT (victim->extra2, NHELPER);
	 }
	 return;
      }
      if (!str_cmp (arg3, "wanted"))
      {
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (IS_SET (victim->newbits, WANTED))
	 {
	    send_to_char ("Removed.\n\r", ch);
	    REMOVE_BIT (victim->newbits, WANTED);
	 }
	 else
	 {
	    send_to_char (" Set.\n\r", ch);
	    SET_BIT (victim->newbits, WANTED);
	 }
	 return;
      }
      if (!str_cmp (arg3, "whine"))
      {
	 if (!IS_CREATOR (ch))
	 {
	    stc ("You cannot do that!\n\r", ch);
	    return;
	 }
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (IS_SET (victim->extra2, WHINER))
	 {
	    send_to_char ("Removed.\n\r", ch);
	    REMOVE_BIT (victim->extra2, WHINER);
	 }
	 else
	 {
	    send_to_char (" Set.\n\r", ch);
	    send_to_char ("You have been classified a whiner!\n\r", victim);
	    SET_BIT (victim->extra2, WHINER);
	 }
	 return;
      }
      if (!str_cmp (arg3, "demented"))
      {
//	 if (!IS_CREATOR (ch))
//	 {
//	    stc ("You cannot do that!\n\r", ch);
//	    return;
//	 }
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
         if (IS_SET (victim->extra2, DEMENTED))
	 {
	    send_to_char ("Removed.\n\r", ch);
            sprintf(buf, "%s is no longer demented!", victim->name);
            do_info(ch, buf);
            REMOVE_BIT (victim->extra2, DEMENTED);
            send_to_char ("You receive a day pass and make a break for it!\n\r", victim);
	 }
	 else
	 {
	    send_to_char (" Set.\n\r", ch);
            sprintf(buf, "Uh-oh watch out! %s is now demented!", victim->name);
            do_info(ch, buf);
            send_to_char ("You have been sent to the asylum!\n\r", victim);
            SET_BIT (victim->extra2, DEMENTED);
	 }
	 return;
      }
      if (!str_cmp (arg3, "channel"))
      {
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (IS_SET (victim->more, CANCHAN))
	 {
	    send_to_char ("Removed.\n\r", ch);
	    REMOVE_BIT (victim->more, CANCHAN);
	 }
	 else
	 {
	    send_to_char (" Set.\n\r", ch);
	    SET_BIT (victim->more, CANCHAN);
	 }
	 return;
      }
      if (!str_cmp (arg3, "roomflags"))
      {
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (!IS_IMMORTAL (victim))
	 {
	    stc ("Only on Immortals!\n\r", ch);
	    return;
	 }
	 if (IS_SET (victim->more, MORE_ROOMFLAGS))
	 {
	    send_to_char ("Removed.\n\r", ch);
	    REMOVE_BIT (victim->more, MORE_ROOMFLAGS);
	 }
	 else
	 {
	    send_to_char (" Set.\n\r", ch);
	    SET_BIT (victim->more, MORE_ROOMFLAGS);
	 }
	 return;
      }
      if (!str_cmp (arg3, "outcast"))
      {
	 if (IS_NPC (victim))
	 {
	    stc ("Not on NPC's!\n\r", ch);
	    return;
	 }

	 if (IS_SET (victim->more, MORE_NOKING))
	 {
	    send_to_char ("REMOVED.\n\r", ch);
	    REMOVE_BIT (victim->more, MORE_NOKING);
	 }
	 else
	 {
	    send_to_char ("ADDED.\n\r", ch);
	    SET_BIT (victim->more, MORE_NOKING);
	 }
	 return;
      }
      if (!str_cmp (arg3, "testchar"))
      {
	 if (IS_NPC (victim))
	 {
	    stc ("Not on NPC's!\n\r", ch);
	    return;
	 }

	 if (IS_SET (victim->more, MORE_TEST))
	 {
	    send_to_char ("You remove their test char status.\n\r", ch);
	    stc ("You are NO Longer a test char.\n\r", victim);
	    REMOVE_BIT (victim->more, MORE_TEST);
	 }
	 else
	 {
	    send_to_char ("You make them a test char.\n\r", ch);
	    stc ("You are now a test char.\n\r", victim);
	    SET_BIT (victim->more, MORE_TEST);
	 }
	 return;
      }
      if (!str_cmp (arg3, "afk"))
      {
	 if (IS_NPC (victim))
	 {
	    stc ("Not on NPC's!\n\r", ch);
	    return;
	 }

	 if (IS_SET (victim->flag2, EXTRA_AFK))
	 {
	    send_to_char ("You remove their afk status.\n\r", ch);
	    REMOVE_BIT (victim->flag2, EXTRA_AFK);
	 }
	 else
	 {
	    send_to_char ("You set them afk.\n\r", ch);
	    SET_BIT (victim->flag2, EXTRA_AFK);
	 }
	 return;
      }
      if (!str_cmp (arg3, "married"))
      {
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (IS_EXTRA (victim, EXTRA_MARRIED))
	 {
	    send_to_char ("Marriage Removed.\n\r", ch);
	    REMOVE_BIT (victim->extra, EXTRA_MARRIED);
	    free_string (victim->pcdata->marriage);
	    victim->pcdata->marriage = str_dup (" ");
	 }
	 else
	 {
	    send_to_char (" Marriage bit set.\n\r", ch);
	    SET_BIT (victim->extra, EXTRA_MARRIED);
	 }
	 return;
      }
      if (!str_cmp (arg3, "ftalk"))
      {
	 if (str_cmp(ch->name, "Tadaken") && (ch->trust < 13))
	 {
	    send_to_char ("Sorry, you can't do that!", ch);
	    return;
	 }
	 if (IS_NPC (victim))
	 {
	    send_to_char ("Not on NPC's!\n\r", ch);
	    return;
	 }
	 if (IS_SET (victim->more, MORE_FTALK2))
	 {
	    send_to_char ("You remove them from the FTALK channel.\n\r", ch);
	    send_to_char ("You are no longer on the FTALK channel!\n\r",
			  victim);
	    REMOVE_BIT (victim->more, MORE_FTALK2);
	 }
	 else
	 {
	    send_to_char ("You add them to the FTALK channel.\n\r", ch);
	    send_to_char
	       ("You have been added to the FTALK channel.\n\rSyntax is: ftalk <message>\n\r",
		victim);
	    SET_BIT (victim->more, MORE_FTALK2);
	 }
	 return;
      }
   }
   if (!str_cmp (arg2, "impset"))
   {
      if (!IS_CREATOR (ch) || IS_NPC (ch))
      {
	 send_to_char ("Sorry, you can't do that!", ch);
	 return;
      }
      send_to_char ("You have made them implementor!\n\r", ch);
      send_to_char ("You have been made implementor!\n\r", victim);
      victim->level = MAX_LEVEL;
      victim->trust = MAX_LEVEL;
      return;
   }
   if (!str_cmp (arg2, "paradox"))
   {
      if (!IS_CREATOR (ch))
      {
	 stc ("Sorry, no can do...\n\r", ch);
	 return;
      }

      if (value < 0 || value > 100)
      {
	 stc ("Paradox range is 0 - 100.\n\r", ch);
	 return;
      }

      victim->paradox[1] = value;
      stc ("Paradox set.\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "fullsphere"))
   {
      if ((!IS_CLASS (victim, CLASS_MAGE) || IS_NPC (victim))
	  && !IS_IMMORTAL (ch))
      {
	 send_to_char ("Sorry, only on mage chars.\n\r", ch);
	 return;
      }

      for (i = 0; i < 9; i++)
      {
	 victim->spheres[i] = value;
      }
      send_to_char ("Their spheres have been set.\n\r", ch);
      send_to_char ("You now have all spheres.\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "spouse"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }
      free_string (victim->pcdata->marriage);
      victim->pcdata->marriage = str_dup (capitalize(arg3));
      send_to_char ("Spouse set!\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "kingrank"))

   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 5)
      {
	 send_to_char ("Ranks can be from 0 to 5\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->pcdata->kingrank = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "mkills"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }
      if (IS_JUDGE (ch))
      {
	 victim->mkill = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "mdeaths"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }
      if (IS_JUDGE (ch))
      {
	 victim->mdeath = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "pkills"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }
      if (IS_JUDGE (ch))
      {
	 victim->pkill = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "pdeaths"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }
      if (IS_JUDGE (ch))
      {
	 victim->pdeath = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "akills"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }
      if (IS_JUDGE (ch))
      {
	 victim->awins = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "adeaths"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }
      if (IS_JUDGE (ch))
      {
	 victim->alosses = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "beast"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 100)
      {
	 send_to_char ("Beast range is 0 to 100.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->beast = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }


/* psetting dps is possible - Loki */
   if (!str_cmp (arg2, "dps"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }


      if (value < 1 || value > 2000000)
      {
	 send_to_char ("Demon points range is 1 to 2000000.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->pcdata->stats[DEMON_CURRENT] = value;
	 victim->pcdata->stats[DEMON_TOTAL] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

/* Pset Status - Loki */

   if (!str_cmp (arg2, "legend"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 10)
      {
	 send_to_char ("Status range is 1 to 10.\n\r", ch);
	 return;
      }

      if (IS_IMPLEMENTOR (ch))
      {
	 victim->lstatus = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "status"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 100)
      {
	 send_to_char ("Status range is 1 to 100.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->race = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "status+"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || (value + victim->race) > 100)
      {
	 send_to_char ("Status range is 1 to 100.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->race += value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "status-"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value > 100 || (victim->race - value) < 0)
      {
	 send_to_char ("Status range is 1 to 100.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->race -= value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }


   if (!str_cmp (arg2, "bounty"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 1500)
      {
	 send_to_char ("Status range is 1 to 1500.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->pcdata->bounty = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "recall"))
   {
      if (IS_NPC (victim))
      {
	 stc ("Not on NPC's.\n\r", ch);
	 return;
      }
      victim->home = value;
      stc ("Recall Set.\n\r", ch);
      return;
   }
   if (!str_cmp (arg2, "quest"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 1 || value > 150000)
      {
	 send_to_char ("Quest range is 1 to 150000.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->pcdata->quest = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "quest+"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 1 || value + victim->pcdata->quest > 100000)
      {
	 send_to_char ("Quest range is 1 to 15000.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->pcdata->quest += value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "quest-"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (victim->pcdata->quest - value < 0 || value > 100000)
      {
	 send_to_char ("Quest range is 1 to 15000.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->pcdata->quest -= value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "viper"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Viper range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_VIPER] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "crane"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Crane range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_CRANE] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "crab"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Crab range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_CRAB] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "mongoose"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Mongoose range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_MONGOOSE] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "bull"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Bull range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_BULL] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "mantis"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Mantis range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_MANTIS] = value;
	 victim->stance[STANCE_CRANE] = 200;
	 victim->stance[STANCE_VIPER] = 200;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "dragon"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Dragon range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_DRAGON] = value;
	 victim->stance[STANCE_CRAB] = 200;
	 victim->stance[STANCE_BULL] = 200;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "tiger"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Tiger range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_TIGER] = value;
	 victim->stance[STANCE_BULL] = 200;
	 victim->stance[STANCE_VIPER] = 200;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "monkey"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Monkey range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {

	 victim->stance[STANCE_MONKEY] = value;
	 victim->stance[STANCE_MONGOOSE] = 200;
	 victim->stance[STANCE_CRANE] = 200;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "swallow"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance Swallow range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->stance[STANCE_SWALLOW] = value;
	 victim->stance[STANCE_CRAB] = 200;
	 victim->stance[STANCE_MONGOOSE] = 200;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "stanceall"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (value < 0 || value > 200)
      {
	 send_to_char ("Stance range is 0 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 int i;
	 for (i = 1; i <= 10; i++)
	    victim->stance[i] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "purple"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (IS_CLASS (victim, CLASS_MAGE) && (value < 4 || value > 240))
      {
	 send_to_char ("Spell range is 4 to 240.\n\r", ch);
	 return;
      }
      else if (value < 4 || value > 200)
      {
	 send_to_char ("Spell range is 4 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->spl[PURPLE_MAGIC] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "spellall"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (IS_CLASS (victim, CLASS_MAGE) && (value < 4 || value > 240))
      {
	 send_to_char ("Spell range is 4 to 240.\n\r", ch);
	 return;
      }
      else if (value < 4 || value > 200)
      {
	 send_to_char ("Spell range is 4 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->spl[PURPLE_MAGIC] = value;
	 victim->spl[RED_MAGIC] = value;
	 victim->spl[BLUE_MAGIC] = value;
	 victim->spl[GREEN_MAGIC] = value;
	 victim->spl[YELLOW_MAGIC] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "red"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (IS_CLASS (victim, CLASS_MAGE) && (value < 4 || value > 240))
      {
	 send_to_char ("Spell range is 4 to 240.\n\r", ch);
	 return;
      }
      else if (value < 4 || value > 200)
      {
	 send_to_char ("Spell range is 4 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->spl[RED_MAGIC] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "blue"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (IS_CLASS (victim, CLASS_MAGE) && (value < 4 || value > 240))
      {
	 send_to_char ("Spell range is 4 to 240.\n\r", ch);
	 return;
      }
      else if (value < 4 || value > 200)
      {
	 send_to_char ("Spell range is 4 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->spl[BLUE_MAGIC] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "green"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (IS_CLASS (victim, CLASS_MAGE) && (value < 4 || value > 240))
      {
	 send_to_char ("Spell range is 4 to 240.\n\r", ch);
	 return;
      }
      else if (value < 4 || value > 200)
      {
	 send_to_char ("Spell range is 4 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->spl[GREEN_MAGIC] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "yellow"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (IS_CLASS (victim, CLASS_MAGE) && (value < 4 || value > 240))
      {
	 send_to_char ("Spell range is 4 to 240.\n\r", ch);
	 return;
      }
      else if (value < 4 || value > 200)
      {
	 send_to_char ("Spell range is 4 to 200.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 victim->spl[YELLOW_MAGIC] = value;
	 send_to_char ("Ok.\n\r", ch);
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "immune"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      if (arg3 == '\0')
      {
	 send_to_char ("pset <victim> immune <immunity>.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 if (!str_cmp (arg3, "voodoo"))
	 {
	    if (IS_SET (victim->immune, IMM_VOODOO))
	    {
	       REMOVE_BIT (victim->immune, IMM_VOODOO);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_VOODOO);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "slash"))
	 {
	    if (IS_SET (victim->immune, IMM_SLASH))
	    {
	       REMOVE_BIT (victim->immune, IMM_SLASH);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_SLASH);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "stab"))
	 {
	    if (IS_SET (victim->immune, IMM_STAB))
	    {
	       REMOVE_BIT (victim->immune, IMM_STAB);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_STAB);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "smash"))
	 {
	    if (IS_SET (victim->immune, IMM_SMASH))
	    {
	       REMOVE_BIT (victim->immune, IMM_SMASH);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_SMASH);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "anmial"))
	 {
	    if (IS_SET (victim->immune, IMM_ANIMAL))
	    {
	       REMOVE_BIT (victim->immune, IMM_ANIMAL);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_ANIMAL);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "misc"))
	 {
	    if (IS_SET (victim->immune, IMM_MISC))
	    {
	       REMOVE_BIT (victim->immune, IMM_MISC);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_MISC);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "charm"))
	 {
	    if (IS_SET (victim->immune, IMM_CHARM))
	    {
	       REMOVE_BIT (victim->immune, IMM_CHARM);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_CHARM);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }
	 if (!str_cmp (arg3, "heat"))
	 {
	    if (IS_SET (victim->immune, IMM_HEAT))
	    {
	       REMOVE_BIT (victim->immune, IMM_HEAT);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_HEAT);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }
	 if (!str_cmp (arg3, "cold"))
	 {
	    if (IS_SET (victim->immune, IMM_COLD))
	    {
	       REMOVE_BIT (victim->immune, IMM_COLD);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_COLD);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "lightning"))
	 {
	    if (IS_SET (victim->immune, IMM_LIGHTNING))
	    {
	       REMOVE_BIT (victim->immune, IMM_LIGHTNING);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_LIGHTNING);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "acid"))
	 {
	    if (IS_SET (victim->immune, IMM_ACID))
	    {
	       REMOVE_BIT (victim->immune, IMM_ACID);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_ACID);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "shield"))
	 {
	    if (IS_SET (victim->immune, IMM_SHIELDED))
	    {
	       REMOVE_BIT (victim->immune, IMM_SHIELDED);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_SHIELDED);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "hurl"))
	 {
	    if (IS_SET (victim->immune, IMM_HURL))
	    {
	       REMOVE_BIT (victim->immune, IMM_HURL);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_HURL);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "backstab"))
	 {
	    if (IS_SET (victim->immune, IMM_BACKSTAB))
	    {
	       REMOVE_BIT (victim->immune, IMM_BACKSTAB);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_BACKSTAB);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "kick"))
	 {
	    if (IS_SET (victim->immune, IMM_KICK))
	    {
	       REMOVE_BIT (victim->immune, IMM_KICK);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_KICK);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "disarm"))
	 {
	    if (IS_SET (victim->immune, IMM_DISARM))
	    {
	       REMOVE_BIT (victim->immune, IMM_DISARM);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_DISARM);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "steal"))
	 {
	    if (IS_SET (victim->immune, IMM_STEAL))
	    {
	       REMOVE_BIT (victim->immune, IMM_STEAL);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_STEAL);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "sleep"))
	 {
	    if (IS_SET (victim->immune, IMM_SLEEP))
	    {
	       REMOVE_BIT (victim->immune, IMM_SLEEP);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_SLEEP);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "sunlight"))
	 {
	    if (IS_SET (victim->immune, IMM_SUNLIGHT))
	    {
	       REMOVE_BIT (victim->immune, IMM_SUNLIGHT);
	       send_to_char ("Ok Immunity Removed.\n\r", ch);
	       return;
	    }
	    else
	    {
	       SET_BIT (victim->immune, IMM_SUNLIGHT);
	       send_to_char ("Ok Immunity Added.\n\r", ch);
	       return;
	    }
	 }

	 if (!str_cmp (arg3, "all"))
	 {
	    SET_BIT (victim->immune, IMM_DRAIN);
	    SET_BIT (victim->immune, IMM_VOODOO);
	    SET_BIT (victim->immune, IMM_SLASH);
	    SET_BIT (victim->immune, IMM_STAB);
	    SET_BIT (victim->immune, IMM_SMASH);
	    SET_BIT (victim->immune, IMM_ANIMAL);
	    SET_BIT (victim->immune, IMM_MISC);
	    SET_BIT (victim->immune, IMM_CHARM);
	    SET_BIT (victim->immune, IMM_HEAT);
	    SET_BIT (victim->immune, IMM_COLD);
	    SET_BIT (victim->immune, IMM_LIGHTNING);
	    SET_BIT (victim->immune, IMM_ACID);
	    SET_BIT (victim->immune, IMM_HURL);
	    SET_BIT (victim->immune, IMM_BACKSTAB);
	    SET_BIT (victim->immune, IMM_KICK);
	    SET_BIT (victim->immune, IMM_DISARM);
	    SET_BIT (victim->immune, IMM_STEAL);
	    SET_BIT (victim->immune, IMM_SLEEP);
	    send_to_char ("Ok All Immunities Added.\n\r", ch);
	    return;
	 }

	 send_to_char ("No such immunity exists.\n\r", ch);
	 return;
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "weapon"))
   {
      if (IS_NPC (victim))
      {
	 send_to_char ("Not on NPC's.\n\r", ch);
	 return;
      }

      argument = one_argument (argument, arg4);
      /*
       * Snarf the value (which need not be numeric).
       */
      value = is_number (arg4) ? atoi (arg4) : -1;

      if (value < 0 || value > 1000)
      {
	 send_to_char ("Weapon skill range is 0 to 1000.\n\r", ch);
	 return;
      }

      if (IS_JUDGE (ch))
      {
	 if (!str_cmp (arg3, "unarmed"))
	 {
	    victim->wpn[0] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "slice"))
	 {
	    victim->wpn[1] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "stab"))
	 {
	    victim->wpn[2] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "slash"))
	 {
	    victim->wpn[3] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "whip"))
	 {
	    victim->wpn[4] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "claw"))
	 {
	    victim->wpn[5] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "blast"))
	 {
	    victim->wpn[6] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "pound"))
	 {
	    victim->wpn[7] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "crush"))
	 {
	    victim->wpn[8] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "grep"))
	 {
	    victim->wpn[9] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "bite"))
	 {
	    victim->wpn[10] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "pierce"))
	 {
	    victim->wpn[11] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "suck"))
	 {
	    victim->wpn[12] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }

	 if (!str_cmp (arg3, "all"))
	 {
	    victim->wpn[0] = value;
	    victim->wpn[1] = value;
	    victim->wpn[2] = value;
	    victim->wpn[3] = value;
	    victim->wpn[4] = value;
	    victim->wpn[5] = value;
	    victim->wpn[6] = value;
	    victim->wpn[7] = value;
	    victim->wpn[8] = value;
	    victim->wpn[8] = value;
	    victim->wpn[9] = value;
	    victim->wpn[10] = value;
	    victim->wpn[11] = value;
	    victim->wpn[12] = value;
	    send_to_char ("Ok.\n\r", ch);
	    return;
	 }
	 send_to_char ("No such weapon skill exists.\n\r", ch);
	 return;
      }
      else
	 send_to_char ("Sorry, no can do...\n\r", ch);
      return;
   }

   /*
    * Generate usage message.
    */
   do_pset (ch, "");
   return;
}

void strip_obj (CHAR_DATA * ch)
{
   OBJ_DATA *obj;

   if (IS_NPC (ch))
      return;

   if ((obj = ch->pcdata->chobj) == NULL)
      return;

   ch->pcdata->obj_vnum = 0;
   obj->chobj = NULL;
   ch->pcdata->chobj = NULL;

   REMOVE_BIT (ch->affected_by, AFF_POLYMORPH);
   REMOVE_BIT (ch->extra, EXTRA_OSWITCH);
   REMOVE_BIT (ch->extra, EXTRA_ASH);
   REMOVE_BIT (ch->extra, EXTRA_PLASMA);

   FILL_STRING (ch->morph, "");
   act ("$p transforms into $n.", ch, obj, NULL, TO_ROOM);
   act ("You reform your human body.", ch, obj, NULL, TO_CHAR);
   extract_obj (obj);
   if (ch->in_room->vnum == ROOM_VNUM_IN_OBJECT)
   {
      char_from_room (ch);
      char_to_room (ch, get_room_index (3054));
   }

   return;
}

/*Tidied up*/
void paradox (CHAR_DATA * ch)
{

   char buf[MAX_STRING_LENGTH];
   char paradoxlog[MAX_STRING_LENGTH];



   sprintf (paradoxlog, "Name: %s    Paradox Points: %d", ch->name,
	    ch->paradox[1]);
   log_string (paradoxlog, ch);

   if (ch->level < 3)
      return;

   if (IS_CLASS (ch, CLASS_NINJA) && IS_AFFECTED (ch, AFF_HIDE))
   {
      stc ("You emerge from the shadows!\n\r", ch);
      REMOVE_BIT (ch->affected_by, AFF_HIDE);
   }
   send_to_char ("The sins of your past strike back!\n\r", ch);
   send_to_char ("The paradox has come for your soul!\n\r", ch);
   sprintf (buf, "%s is struck by a paradox.", ch->name);
   //SET_BIT(ch->newbits, WANTED);
   do_info (ch, buf);
   ch->paradox[1] = 0;
   ch->paradox[2] = 0;

   strip_obj (ch);

//   if (ch->race > 1)
//      ch->race--;

   ch->hit = -10;
   update_pos (ch);
   do_escape (ch, "");
   SET_BIT (ch->extra, TIED_UP);
   SET_BIT (ch->extra, GAGGED);
   SET_BIT (ch->extra, BLINDFOLDED);
   return;

}

void do_pmort (CHAR_DATA * ch, char *argument)
{
   char arg[MAX_INPUT_LENGTH];
   CHAR_DATA *victim;
   DESCRIPTOR_DATA *d;
   argument = one_argument (argument, arg);

   if (arg[0] == '\0')
   {
      send_to_char ("Mort whom?\n\r", ch);
      return;
   }

   if (get_trust (ch) >= MAX_LEVEL - 1 && !str_cmp (arg, "all"))
   {
      for (d = first_descriptor; d != NULL; d = d->next)
      {
	 victim = d->character;

	 if (victim == NULL || IS_NPC (victim) || IS_IMMORTAL (victim))
	    continue;
	 {
	    victim->hit = -10;
	    update_pos (victim);
	 }
      }
   }

   if ((victim = get_char_world (ch, arg)) == NULL)
   {
      send_to_char ("They aren't here..\n\r", ch);
      return;
   }

   if (ch == victim)
   {
      send_to_char ("Does pain give you pleasure?\n\r", ch);
      return;
   }

   if (IS_NPC (victim))
   {
      send_to_char ("Not on MOBS.\n\r", ch);
      return;
   }
   if (IS_IMMORTAL (victim))
   {
      send_to_char ("You are unable to Pmort Imms.\n\r", ch);
      return;
   }
   victim->hit = -10;
   update_pos (victim);
   send_to_char ("Ok, they're morted!\n\r", ch);
}

void do_paradox (CHAR_DATA * ch, char *argument)
{
   char arg[MAX_INPUT_LENGTH];
   CHAR_DATA *victim;
   DESCRIPTOR_DATA *d;
   argument = one_argument (argument, arg);


   if (arg[0] == '\0')
   {
      send_to_char ("Paradox whom?\n\r", ch);
      return;
   }

   if (get_trust (ch) >= MAX_LEVEL - 2 && !str_cmp (arg, "all"))


   {
      for (d = first_descriptor; d != NULL; d = d->next)
      {
	 victim = d->character;

	 if (victim == NULL || IS_NPC (victim) || IS_IMMORTAL (victim))
	    continue;


	 {
	    paradox (victim);
	 }
      }
   }
/*    
    if IS_NPC(victim)
    {
	send_to_char("Not on MOBILES!\n\r",ch);
	return;
    }
*/
   if ((victim = get_char_world (ch, arg)) == NULL || IS_NPC (victim))
   {
      send_to_char ("They aren't here.\n\r", ch);
      return;

   }
/*
     if (ch == victim)
     {
	send_to_char("I dont think so.\n\r",ch);
        return;
     }
*/

   if IS_IMMORTAL
      (victim)
   {
      send_to_char ("You are unable to paradox Imms,\n\r", ch);
      return;
   }

   paradox (victim);
   send_to_char ("PARADOXED!\n\r", ch);
}