aoh/src/
aoh/votes/
/***************************************************************************
 *  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.                                                  *
 ***************************************************************************/

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"

/*
 * The following special functions are available for mobiles.
 */
DECLARE_SPEC_FUN( spec_priest		);
DECLARE_SPEC_FUN( spec_ninja		);

// Guilds
DECLARE_SPEC_FUN( spec_guard_guardian );
DECLARE_SPEC_FUN( spec_guard_dark_hand );
DECLARE_SPEC_FUN( spec_guard_beast );
DECLARE_SPEC_FUN( spec_guard_damned );
DECLARE_SPEC_FUN( spec_guard_crusaders );
DECLARE_SPEC_FUN( spec_guard_druid );

DECLARE_SPEC_FUN( spec_soldier_guardian );
DECLARE_SPEC_FUN( spec_soldier_dark_hand );
DECLARE_SPEC_FUN( spec_soldier_beast );
DECLARE_SPEC_FUN( spec_soldier_damned );
DECLARE_SPEC_FUN( spec_soldier_crusaders );
DECLARE_SPEC_FUN( spec_soldier_druid );

bool spec_soldier_dark_hand(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim) commented out this so they can attack mobs
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 1
     || victim->spec_fun == spec_guard_dark_hand
     || victim->spec_fun == spec_soldier_dark_hand)


	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}
bool spec_soldier_guardian(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim) commented out this so they can attack mobs
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 2
     || victim->spec_fun == spec_guard_guardian
     || victim->spec_fun == spec_soldier_guardian)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}
bool spec_soldier_beast(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim) commented out this so they can attack mobs
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 3
     || victim->spec_fun == spec_guard_beast
     || victim->spec_fun == spec_soldier_beast)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}
bool spec_soldier_damned(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim) commented out this so they can attack mobs
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 4
     || victim->spec_fun == spec_guard_damned
     || victim->spec_fun == spec_soldier_damned)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}
bool spec_soldier_crusaders(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim) commented out this so they can attack mobs
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 5
     || victim->spec_fun == spec_guard_crusaders
     || victim->spec_fun == spec_soldier_crusaders)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}
bool spec_soldier_druid(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim) commented out this so they can attack mobs
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 6
     || victim->spec_fun == spec_guard_druid
     || victim->spec_fun == spec_soldier_druid)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}

bool spec_guard_beast(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim)
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 3
     || victim->spec_fun == spec_guard_beast
     || victim->spec_fun == spec_soldier_beast)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

/*       sprintf( buf,"%s Is Invading The RULER CLAN HALL!\n\r",victim->name); 
        do_info( ch , buf);
        sprintf( buf,"%s RULERS! CLAN RECALL AND GET EM!\n\r",victim->name); 
        do_info( ch , buf);
*/      
      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}

bool spec_guard_damned(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim)
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 4
     || victim->spec_fun == spec_guard_damned
     || victim->spec_fun == spec_soldier_damned)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

/*       sprintf( buf,"%s Is Invading The RULER CLAN HALL!\n\r",victim->name); 
        do_info( ch , buf);
        sprintf( buf,"%s RULERS! CLAN RECALL AND GET EM!\n\r",victim->name); 
        do_info( ch , buf);
*/      
      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}


bool spec_guard_crusaders(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim)
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 5
     || victim->spec_fun == spec_guard_crusaders
     || victim->spec_fun == spec_soldier_crusaders)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

/*       sprintf( buf,"%s Is Invading The RULER CLAN HALL!\n\r",victim->name); 
        do_info( ch , buf);
        sprintf( buf,"%s RULERS! CLAN RECALL AND GET EM!\n\r",victim->name); 
        do_info( ch , buf);
*/      
      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}


bool spec_guard_druid(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim)
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 6
     || victim->spec_fun == spec_guard_druid
     || victim->spec_fun == spec_soldier_druid)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

/*       sprintf( buf,"%s Is Invading The RULER CLAN HALL!\n\r",victim->name); 
        do_info( ch , buf);
        sprintf( buf,"%s RULERS! CLAN RECALL AND GET EM!\n\r",victim->name); 
        do_info( ch , buf);
*/      
      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}





bool spec_guard_dark_hand(CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim)
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 1
     || victim->spec_fun == spec_guard_dark_hand
     || victim->spec_fun == spec_soldier_dark_hand)

	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

/*       sprintf( buf,"%s Is Invading The RULER CLAN HALL!\n\r",victim->name); 
        do_info( ch , buf);
        sprintf( buf,"%s RULERS! CLAN RECALL AND GET EM!\n\r",victim->name); 
        do_info( ch , buf);
*/      
      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}



bool spec_guard_guardian( CHAR_DATA *ch, char *argument)
{
   DESCRIPTOR_DATA       *d;
   CHAR_DATA             *victim;
   char                  buf[MAX_STRING_LENGTH];


   if (ch->fighting) return FALSE;

   if (ch->in_room == NULL) return FALSE;
   if (ch->position != POS_STANDING) return FALSE;


   for (d = descriptor_list; d != NULL; d = d->next)
   {
       if (!IS_PLAYING(d)
	   || (victim = d->character) == NULL
//           || IS_NPC(victim)
           || IS_IMMORTAL(victim)
	   || victim->in_room == NULL
           || victim->pcdata->chobj != NULL
           || victim->in_room->area != ch->in_room->area
	   || victim->guild == 2
     || victim->spec_fun == spec_guard_guardian
     || victim->spec_fun == spec_soldier_guardian)
	{
            continue;
        }

        if (ch->in_room!=victim->in_room)
        {
           act("$n disappears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You disappear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);

           char_from_room( ch );
           char_to_room(ch, victim->in_room);

           act("$n appears in a swirl of smoke!",ch,NULL,NULL,TO_ROOM);
           act("You appear in a swirl of smoke!",ch,NULL,NULL,TO_CHAR);
        }

        spell_curse( 24 , 100 , ch , victim ); /* No Recall */

        if (victim->position <= POS_MORTAL && IS_HERO(victim) &&
	  ch->position == POS_STANDING)
        {
           char_from_room( victim );
           char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
           continue;
        }
        if (is_safe(ch,victim)) return FALSE;

/*       sprintf( buf,"%s Is Invading The RULER CLAN HALL!\n\r",victim->name); 
        do_info( ch , buf);
        sprintf( buf,"%s RULERS! CLAN RECALL AND GET EM!\n\r",victim->name); 
        do_info( ch , buf);
*/      
      
        multi_hit( ch, victim, gsn_punch);

        return TRUE;

   }
   return FALSE;
}



/***************************************************
 * This is a prototype of a special program, feel  *
 * free to copy and edit this to suit your needs   *
 ***************************************************

bool spec_prototype(CHAR_DATA *ch, char *argument)
{
  if (!str_cmp(argument, "update"))
  {
    if (ch->fighting) return FALSE;

    // This part should contain movement, spell-casting, etc,
    // this part is called once every 4 seconds, and is not
    // related to combat...
  }
  else if (!str_cmp(argument, "midround"))
  {
    if (!ch->fighting) return FALSE;

    // This part is the combat oriented part of the code,
    // and is called once every combat round. It should
    // contain special moves/powers the mob uses in combat.
  }

  return FALSE;
}

****************************************************/

bool spec_ninja(CHAR_DATA *ch, char *argument)
{
  if (!str_cmp(argument, "update"))
  {
    if (ch->fighting) return FALSE;

    /* if not hidden, hide */
    if (ch->position == POS_STANDING && !IS_AFFECTED(ch, AFF_HIDE))
      do_hide(ch, "");
    else return FALSE;
  }
  else if (!str_cmp(argument, "midround"))
  {
    CHAR_DATA *victim;

    if ((victim = ch->fighting) == NULL)
      return FALSE;

    if (number_range(1,3) == 2)
      one_hit(ch, victim, gsn_backstab, 0);
  }

  return FALSE;
}

bool spec_priest(CHAR_DATA *ch, char *argument)
{
  if (!str_cmp(argument, "update"))
  {
    CHAR_DATA *vch;
    CHAR_DATA *gch;
    bool found = FALSE;
    int sn;

    for (vch = ch->in_room->people; vch && !found; vch = vch->next_in_room)
    {
      if (vch == ch) continue;
      if (number_range(1,2) == 1) continue;
      found = TRUE;
      gch = vch;
    }

    if (!found) return FALSE;

    switch(number_range(1,3))
    {
      case 1:
        sn = skill_lookup("heal");
        break;
      case 2:
        sn = skill_lookup("bless");
        break;
      case 3:
        sn = skill_lookup("darkblessing");
        break;
    }
    if (sn < 1) return FALSE;

    act("$n mumbles a few arcane words.", ch, NULL, NULL, TO_ROOM);
    (*skill_table[sn].spell_fun) (sn, ch->level, ch, gch);

    return TRUE;
  }
  else if (!str_cmp(argument, "midround"))
  {
    /* the priest does not fight */
    return FALSE;
  }

  return FALSE;
}



/*
 * Special Functions Table.     OLC
 */
const   struct  spec_type       spec_table      [ ] =
{
    /*
     * Special function commands.
     */
    { "spec_priest",                spec_priest         },
    { "spec_ninja",                 spec_ninja          },
  { "spec_guard_guardian", spec_guard_guardian },
  { "spec_guard_dark_hand", spec_guard_dark_hand },
  { "spec_guard_beast", spec_guard_beast },
  { "spec_guard_damned", spec_guard_damned },
  { "spec_guard_crusaders", spec_guard_crusaders },
  { "spec_guard_druid", spec_guard_druid },

  { "spec_soldier_guardian", spec_soldier_guardian },
  { "spec_soldier_dark_hand", spec_soldier_dark_hand },
  { "spec_soldier_beast", spec_soldier_beast },
  { "spec_soldier_damned", spec_soldier_damned },
  { "spec_soldier_crusaders", spec_soldier_crusaders },
  { "spec_soldier_druid", spec_soldier_druid },
    /*
     * End of list.
     */
    { "",                       0       }
};


/*****************************************************************************
 Name:          spec_lookup
 Purpose:       Given a name, return the appropriate spec fun.
 Called by:     do_mset(act_wiz.c) load_specials,reset_area(db.c)
 ****************************************************************************/
SPEC_FUN *spec_lookup( const char *name )       /* OLC */
{   
    int cmd;

    for ( cmd = 0; *spec_table[cmd].spec_name; cmd++ )  /* OLC 1.1b */
        if ( !str_cmp( name, spec_table[cmd].spec_name ) )
            return spec_table[cmd].spec_fun;
 
    return 0;
}

/*****************************************************************************
 Name:          spec_string
 Purpose:       Given a function, return the appropriate name.
 Called by:     <???>
 ****************************************************************************/
char *spec_string( SPEC_FUN *fun )      /* OLC */
{
    int cmd;

    for ( cmd = 0; *spec_table[cmd].spec_fun; cmd++ )   /* OLC 1.1b */
        if ( fun == spec_table[cmd].spec_fun )
            return spec_table[cmd].spec_name;
    
    return 0;
}