--- act_wiz.c	Sun Jun 29 12:58:04 1997
+++ new/act_wiz.c	Sun Jun 29 13:08:41 1997
@@ -402,6 +402,42 @@
     return;
 }
 
+void do_undeny( CHAR_DATA *ch, char *argument )
+{
+    char arg[MAX_INPUT_LENGTH];
+    CHAR_DATA *victim;
+
+    one_argument( argument, arg );
+    if ( arg[0] == '\0' )
+    {
+	send_to_char( "Undeny whom?\n\r", ch );
+	return;
+    }
+
+    if ( ( victim = get_char_world( ch, arg ) ) == NULL )
+    {
+	send_to_char( "They aren't here, load them up.\n\r", ch );
+	return;
+    }
+
+    if ( IS_NPC(victim) )
+    {
+	send_to_char( "Not on NPC's.\n\r", ch );
+	return;
+    }
+
+    if ( get_trust( victim ) >= get_trust( ch ) )
+    {
+	send_to_char( "You failed.\n\r", ch );
+	return;
+    }
+
+    REMOVE_BIT(victim->act, PLR_DENY);
+    send_to_char( "OK.\n\r", ch );
+    do_quit( victim, "" );
+    return;
+}
+
 
 
 void do_disconnect( CHAR_DATA *ch, char *argument )
@@ -932,7 +968,7 @@
 
     Start = atoi( arg1 );	End = atoi( arg2 );
 
-    if ( Start < 1 || End < Start || Start > End || Start == End || End > 32767 )
+    if ( Start < 1 || End < Start || Start > End || Start == End || End > 2097152000 )
     {
 	send_to_char( "Invalid range.\n\r", ch );
 	return;
@@ -1251,7 +1287,7 @@
 	get_curr_con(victim),
 	get_curr_cha(victim),
 	get_curr_lck(victim) );
-    if (IS_VAMPIRE(victim) && !IS_NPC(victim))
+    if ((IS_VAMPIRE(victim) && !IS_NPC(victim)) || (IS_DEMON(victim) && !IS_NPC(victim)))
     ch_printf( ch, "Hps: %d/%d   Blood: %d/%d   Move: %d/%d   Practices: %d\n\r",
         victim->hit,         victim->max_hit,  
         victim->pcdata->condition[COND_BLOODTHIRST], 10 + victim->level,
@@ -1961,7 +1997,7 @@
     char arg[MAX_INPUT_LENGTH];
     MOB_INDEX_DATA *pMobIndex;
     CHAR_DATA *victim;
-    sh_int vnum;
+    int vnum;
 
     one_argument( argument, arg );
 
@@ -2050,8 +2086,7 @@
     char arg2[MAX_INPUT_LENGTH];
     OBJ_INDEX_DATA *pObjIndex;
     OBJ_DATA *obj;
-    sh_int vnum;
-    int level;
+    int vnum, level;
 
     argument = one_argument( argument, arg1 );
     argument = one_argument( argument, arg2 );
@@ -3657,7 +3694,7 @@
     char arg1[MAX_INPUT_LENGTH];
     char arg2[MAX_INPUT_LENGTH];
     char arg3[MAX_INPUT_LENGTH];
-    sh_int  r_lo, r_hi;
+    int  r_lo, r_hi;
     CHAR_DATA *victim;
     
     argument = one_argument( argument, arg1 );
@@ -3718,7 +3755,7 @@
     char arg1[MAX_INPUT_LENGTH];
     char arg2[MAX_INPUT_LENGTH];
     char arg3[MAX_INPUT_LENGTH];
-    sh_int  o_lo, o_hi;
+    int  o_lo, o_hi;
     CHAR_DATA *victim;
     
     argument = one_argument( argument, arg1 );
@@ -3760,7 +3797,7 @@
     char arg1[MAX_INPUT_LENGTH];
     char arg2[MAX_INPUT_LENGTH];
     char arg3[MAX_INPUT_LENGTH];
-    sh_int  m_lo, m_hi;
+    int  m_lo, m_hi;
     CHAR_DATA *victim;
     
     argument = one_argument( argument, arg1 );
@@ -5195,7 +5232,7 @@
     send_to_char( "They aren't here.\n\r", ch );
     return;
   }
-  if ( IS_IMMORTAL(victim) )
+  if ( IS_GOD(victim) )
   {
     send_to_char( "There is no point in helling an immortal.\n\r", ch );
     return;
@@ -5273,6 +5310,11 @@
     send_to_char( "No one like that is in hell.\n\r", ch );
     return;
   }
+  if ( IS_IMMORTAL(victim) && !IS_GOD(ch) )
+  {
+    send_to_char( "You Cannot Unhell This Person.\n\r", ch );
+    return;
+  }
   if ( victim->pcdata->clan )
     location = get_room_index(victim->pcdata->clan->recall);
   else
@@ -6294,4 +6336,77 @@
 
   send_to_char( "Ok.\n\r", ch );
   return;
+}
+
+void do_clone( CHAR_DATA *ch, char *argument )
+{
+    char arg1[MAX_INPUT_LENGTH];
+    char arg2[MAX_INPUT_LENGTH];
+    CHAR_DATA *victim, *clonemob;
+    OBJ_DATA *obj, *cloneobj;
+
+    if ( IS_NPC(ch) )
+    {
+        send_to_char( "Mobs don't clone... they kill.\n\r", ch );
+        return;
+    }
+
+    smash_tilde( argument );
+    argument = one_argument( argument, arg1 );
+    argument = one_argument( argument, arg2 );
+
+    if ( arg1[0] == '\0' )
+    {
+        send_to_char( "Syntax: clone object [object]\n\r", ch );
+        send_to_char( "        clone mobile [mobile]\n\r", ch );
+        return;
+    }
+
+    if ( !str_cmp( arg1, "obj" ) || !str_cmp( arg1, "object" ) )
+    {
+        if ( ( obj = get_obj_world( ch, arg2 ) ) == NULL )
+        {
+            send_to_char( "Nothing like that in hell, earth, or heaven.\n\r", ch );
+            return;
+        }
+        cloneobj = clone_object_nested( obj );
+        if ( CAN_WEAR(cloneobj, ITEM_TAKE) )
+        {
+            cloneobj = obj_to_char( cloneobj, ch );
+        }
+        else
+        {
+            cloneobj = obj_to_room( cloneobj, ch->in_room );
+            act( AT_IMMORT, "$n has created $p!", ch, cloneobj, NULL, TO_ROOM );
+        }
+        send_to_char( "Ok.\n\r", ch );
+        return;
+    }
+    
+    if ( !str_cmp( arg1, "mob" ) || !str_cmp( arg1, "mobile" ) )
+    {
+        if ( ( victim = get_char_world( ch, arg2 ) ) == NULL )
+        {
+            send_to_char( "They aren't here.\n\r", ch );
+            return;
+        }
+        if ( !IS_NPC( victim ) )
+        {
+            send_to_char( "The government has implemented a ban on the cloning of PCs.\n\r", ch );
+            send_to_char( "You know... ethics and stuff like that...\n\r", ch );
+            return;
+        }
+        clonemob = clone_mobile_nested( victim );
+        if ( !clonemob )
+        {
+            send_to_char( "Something went wrong!\n\r", ch );
+            return;
+        }
+        char_to_room( clonemob, ch->in_room );
+        act( AT_IMMORT, "$n has created $N!", ch, NULL, clonemob, TO_ROOM );
+        send_to_char( "Ok.\n\r", ch );
+        return;
+    }
+    
+    do_clone( ch, "" );
 }