dbna/clans/
dbna/councils/
dbna/deity/
dbna/gods/
dbna/houses/
dbna/space/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |   \\._.//   *
 * -----------------------------------------------------------|   (0...0)   *
 * SMAUG 1.4 (C) 1994, 1995, 1996, 1998  by Derek Snider      |    ).:.(    *
 * -----------------------------------------------------------|    {o o}    *
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |   / ' ' \   *
 * Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek,      |~'~.VxvxV.~'~*
 * Tricops and Fireblade                                      |             *
 * ------------------------------------------------------------------------ *
 *			     Special clan module			    *
 ****************************************************************************/

#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
/* #include <stdlib.h> */
#include <time.h>
#include "mud.h"



#define MAX_NEST	100
//static  OBJ_DATA *  rgObjNest [MAX_NEST];

CLAN_DATA *first_clan;
CLAN_DATA *last_clan;

COUNCIL_DATA *first_council;
COUNCIL_DATA *last_council;

MEMBER_LIST *first_member_list;
MEMBER_LIST *last_member_list;

CENSOR_DATA *first_censor;
CENSOR_DATA *last_censor;

ALLIANCE_DATA *first_alliance;
ALLIANCE_DATA *last_alliance;

/* local routines */
void fread_clan args( ( CLAN_DATA * clan, FILE * fp ) );
bool load_clan_file args( ( char *clanfile ) );
void write_clan_list args( ( void ) );

void fread_council args( ( COUNCIL_DATA * council, FILE * fp ) );
bool load_council_file args( ( char *councilfile ) );
void write_council_list args( ( void ) );

void save_member_list args( ( MEMBER_LIST * members_list ) );
void show_members args( ( CHAR_DATA * ch, char *argument, char *format ) );
/*void	remove_member		args( ( CHAR_DATA *ch ) );*/

char *const clan_alliance_type[] = { "&wNeutral", "&cFriendly", "&CAllied", "&YHostile", "&RAt War" };

char *get_clanTitle( CHAR_DATA * ch )
{
  if( IS_NPC( ch ) )
    return ( "" );
  if( !ch->pcdata->clan )
    return ( "" );

  if( ch->sex == SEX_FEMALE )
  {
    switch ( ch->pcdata->clanRank )
    {
      default:
        return ( "" );
      case 1:
        return ch->pcdata->clan->fRank1;
      case 2:
        return ch->pcdata->clan->fRank2;
      case 3:
        return ch->pcdata->clan->fRank3;
      case 4:
        return ch->pcdata->clan->fRank4;
      case 5:
        return ch->pcdata->clan->fRank5;
      case 6:
        return ch->pcdata->clan->fRank6;
      case 7:
        return ch->pcdata->clan->fRank7;
    }
  }
  else
  {
    switch ( ch->pcdata->clanRank )
    {
      default:
        return ( "" );
      case 1:
        return ch->pcdata->clan->mRank1;
      case 2:
        return ch->pcdata->clan->mRank2;
      case 3:
        return ch->pcdata->clan->mRank3;
      case 4:
        return ch->pcdata->clan->mRank4;
      case 5:
        return ch->pcdata->clan->mRank5;
      case 6:
        return ch->pcdata->clan->mRank6;
      case 7:
        return ch->pcdata->clan->mRank7;
    }
  }
  return ( "" );
}

/*
 * Get pointer to alliance structure for 2 clans.
 */

ALLIANCE_DATA *get_alliance( CLAN_DATA * clan, CLAN_DATA * vclan )
{
  ALLIANCE_DATA *alliance;
  bool found = FALSE;

  if( clan == vclan )
    return NULL;

  for( alliance = first_alliance; alliance; alliance = alliance->next )
  {
    if( alliance->clan == clan && alliance->vclan == vclan )
    {
      found = TRUE;
      break;
    }

  }

  if( !found )
  {
    bug( "get_alliance: No alliance data found for %s and %s", clan->name, vclan->name );
    return NULL;
  }

  return alliance;
}

/*
 * Adds alliance data to all clans when a new clan is created
 */
void newClanAlliance( CLAN_DATA * newClan )
{
  ALLIANCE_DATA *alliance;
  CLAN_DATA *clan;

  for( clan = first_clan; clan; clan = clan->next )
  {
    if( clan == newClan )
      continue;

    CREATE( alliance, ALLIANCE_DATA, 1 );
    alliance->clan = clan;
    alliance->vclan = newClan;
    alliance->status = 0;
    alliance->vclanStatus = 0;
    alliance->votes = 0;
    alliance->leader1Vote = STRALLOC( "None" );
    alliance->leader2Vote = STRALLOC( "None" );
    LINK( alliance, first_alliance, last_alliance, next, prev );
  }
  return;
}

/*
 * Checks to make sure that one clan is totaly agreed on war
 */

bool clan_agreed_war( CLAN_DATA * clan, CLAN_DATA * vclan )
{
  ALLIANCE_DATA *alliance;
  ALLIANCE_DATA *valliance;

  alliance = get_alliance( clan, vclan );
  valliance = get_alliance( vclan, clan );

  if( !alliance )
    return FALSE;
  if( !valliance )
    return FALSE;

  if( alliance->status != ALLIANCE_ATWAR )
    return FALSE;

  if( valliance->status != ALLIANCE_ATWAR )
    return FALSE;

  return TRUE;

  /*
   * if ((!str_cmp(alliance->leader1Vote, clan->leader1)
   * || !str_cmp(alliance->leader1Vote, clan->leader2)
   * || !str_cmp(alliance->leader1Vote, clan->leader3)
   * || !str_cmp(alliance->leader1Vote, clan->leader4)
   * || !str_cmp(alliance->leader1Vote, clan->leader5)
   * || !str_cmp(alliance->leader1Vote, clan->leader6))
   * &&(!str_cmp(alliance->leader2Vote, clan->leader1)
   * || !str_cmp(alliance->leader2Vote, clan->leader2)
   * || !str_cmp(alliance->leader2Vote, clan->leader3)
   * || !str_cmp(alliance->leader2Vote, clan->leader4)
   * || !str_cmp(alliance->leader2Vote, clan->leader5)
   * || !str_cmp(alliance->leader2Vote, clan->leader6))
   * && alliance->votes >= 2)
   * return TRUE;
   */

  return FALSE;
}

/*
 * Returns the alliance status for game affects (like if truly at war)
 */

int allianceStatus( CLAN_DATA * clan, CLAN_DATA * vclan )
{
  ALLIANCE_DATA *alliance;
  ALLIANCE_DATA *valliance;

  alliance = get_alliance( clan, vclan );
  valliance = get_alliance( vclan, clan );

  if( !alliance || !valliance )
  {
    if( clan == vclan )
    {
      return ALLIANCE_ALLIED;
    }
    else
    {
      bug( "allianceStatus: couldn't get alliance data." );
      return ALLIANCE_NEUTRAL;
    }
  }

  if( alliance->status == ALLIANCE_ALLIED )
  {
    if( alliance->vclanStatus == ALLIANCE_ALLIED )
      return ALLIANCE_ALLIED;
    else
      return ALLIANCE_FRIENDLY;
  }

  if( alliance->status == ALLIANCE_ATWAR )
  {
    if( clan_agreed_war( clan, vclan ) && clan_agreed_war( vclan, clan ) )
      return ALLIANCE_ATWAR;
    else
      return ALLIANCE_HOSTILE;
  }

  switch ( alliance->status )
  {
    case ALLIANCE_FRIENDLY:
      return ALLIANCE_NEUTRAL;
    case ALLIANCE_ALLIED:
      return ALLIANCE_ALLIED;
    case ALLIANCE_HOSTILE:
      return ALLIANCE_HOSTILE;
    case ALLIANCE_ATWAR:
      return ALLIANCE_ATWAR;
    default:
      return ALLIANCE_NEUTRAL;
  }
  return ALLIANCE_NEUTRAL;
}

/* To check if ch is the leader of a clan */
bool is_leader( CHAR_DATA * ch )
{
  CLAN_DATA *clan;

  clan = ch->pcdata->clan;

  if( !clan )
    return FALSE;

  if( !str_cmp( ch->name, clan->leader1 ) || !str_cmp( ch->name, clan->leader2 )
      || !str_cmp( ch->name, clan->leader3 ) || !str_cmp( ch->name, clan->leader4 )
      || !str_cmp( ch->name, clan->leader5 ) || !str_cmp( ch->name, clan->leader6 ) )
    return TRUE;

  return FALSE;
}

/* To check if ch is the admin of a clan */
bool is_deity( CHAR_DATA * ch )
{
  CLAN_DATA *clan;

  clan = ch->pcdata->clan;

  if( !clan )
    return FALSE;

  if( !str_cmp( ch->name, clan->deity ) )
    return TRUE;

  return FALSE;
}

/*
 * Changes alliance status for clans
 */

bool change_alliance( CLAN_DATA * clan, CLAN_DATA * vclan, int newStatus )
{
  ALLIANCE_DATA *alliance;
  ALLIANCE_DATA *valliance;
  char buf[MAX_STRING_LENGTH];

  if( ( alliance = get_alliance( clan, vclan ) ) == NULL )
    return FALSE;

  if( ( valliance = get_alliance( vclan, clan ) ) == NULL )
    return FALSE;

  if( alliance->changeTimer > 0 || valliance->changeTimer > 0 )
  {
    sprintf( buf, "The clan alliance cannot be changed till the current change timer reaches 0 again." );
    echo_to_clan( clan, buf );
    return FALSE;
  }

  alliance->changeTimer = ALLIANCE_WAIT_TIME;
  alliance->newStatus = newStatus;

  sprintf( buf, "%s has decided to change their alliance with your clan to %s.", clan->name,
           clan_alliance_type[alliance->newStatus] );
  echo_to_clan( vclan, buf );
  sprintf( buf, "This status change will take effect in %d minutes.", alliance->changeTimer );
  echo_to_clan( vclan, buf );
  sprintf( buf, "Your clan has decided to change their alliance with %s to %s.", vclan->name,
           clan_alliance_type[alliance->newStatus] );
  echo_to_clan( clan, buf );
  sprintf( buf, "This status change will take effect in %d minutes.", alliance->changeTimer );
  echo_to_clan( clan, buf );

  save_clan( clan );
  save_clan( vclan );

  return TRUE;
}

/*
 * Does all the stuff when war status is voted for
 */

void alliance_towar( CHAR_DATA * ch, CLAN_DATA * clan, CLAN_DATA * vclan )
{
  ALLIANCE_DATA *alliance;
  ALLIANCE_DATA *valliance;
  char buf[MAX_STRING_LENGTH];

  alliance = get_alliance( clan, vclan );
  valliance = get_alliance( vclan, clan );

  alliance->votes++;

  if( alliance->votes >= 2 && valliance->votes >= 2 )
  {
    pager_printf( ch, "Your clan is now at war with %s.\n\r", vclan->name );
    sprintf( buf, "%s and %s have begun a massive clan war!\n\r", clan->name, vclan->name );
    echo_to_all( AT_RED, buf, ECHOTAR_ALL );
  }
  else
  {
    pager_printf( ch, "You have put your vote in for war with %s, but both clans have yet to agree on war.\n\r",
                  vclan->name );
    sprintf( buf, "%s has voted to go to war with %s!", ch->name, clan->name );
    echo_to_clan( clan, buf );
    sprintf( buf, "%s has voted to go to war with %s!", clan->name, vclan->name );
    echo_to_clan( vclan, buf );
  }

  if( !str_cmp( alliance->leader1Vote, "None" ) )
  {
    STRFREE( alliance->leader1Vote );
    alliance->leader1Vote = STRALLOC( ch->name );
  }
  else if( !str_cmp( alliance->leader2Vote, "None" ) )
  {
    STRFREE( alliance->leader2Vote );
    alliance->leader2Vote = STRALLOC( ch->name );
  }

  save_clan( clan );
  return;
}

/*
 * Prints a clans alliances with other clans
 */

void show_alliances( CHAR_DATA * ch, CLAN_DATA * clan )
{
  ALLIANCE_DATA *alliance;
  bool found = FALSE;
  char buf[MAX_STRING_LENGTH];

  pager_printf( ch, "&cClan                                        Alliance Status Their Status\n\r" );
  pager_printf( ch, "&g------------------------------------------- --------------- ------------\n\r" );

  for( alliance = first_alliance; alliance; alliance = alliance->next )
  {
    if( alliance->clan != clan )
      continue;

    if( alliance->vclan == NULL )
      continue;

    found = TRUE;

    pager_printf( ch, "&w%-43s %15s %12s\n\r", alliance->vclan->name,
                  clan_alliance_type[alliance->status], clan_alliance_type[alliance->vclanStatus] );
    if( alliance->changeTimer )
    {
      sprintf( buf, "&RStatus changing to %s in %d minutes\n\r",
               clan_alliance_type[alliance->newStatus], alliance->changeTimer );
      pager_printf( ch, "%72s", buf );
    }
  }

  if( !found )
    pager_printf( ch, "No clan alliances formed.\n\r" );
  else
    pager_printf( ch, "&g------------------------------------------------------------------------\n\r" );
  return;
}

/*
 * Get pointer to clan structure from clan name.
 */
CLAN_DATA *get_clan( char *name )
{
  CLAN_DATA *clan;

  for( clan = first_clan; clan; clan = clan->next )
    if( !str_cmp( name, clan->name ) || !str_cmp( name, clan->short_name ) )
      return clan;
  return NULL;
}

COUNCIL_DATA *get_council( char *name )
{
  COUNCIL_DATA *council;

  for( council = first_council; council; council = council->next )
    if( !str_cmp( name, council->name ) )
      return council;
  return NULL;
}

void save_alliance(  )
{
  ALLIANCE_DATA *alliance;
  FILE *fp;
  CLAN_DATA *clan;
  char buf[MAX_STRING_LENGTH];

  sprintf( buf, "%salliance", CLAN_DIR );

  if( ( fp = fopen( buf, "w" ) ) == NULL )
  {
    bug( "Cannot open alliance file for writing", 0 );
    perror( buf );
    return;
  }

  /*
   * Sorts and saves alliance data
   */
  for( clan = first_clan; clan; clan = clan->next )
  {
    for( alliance = first_alliance; alliance; alliance = alliance->next )
    {
      if( clan == alliance->clan )
        fprintf( fp, "Alliance %s~ %s~ %d %d %d %s~ %s~\n", alliance->clan->short_name,
                 alliance->vclan->short_name, alliance->status,
                 alliance->vclanStatus, alliance->votes, alliance->leader1Vote, alliance->leader2Vote );
    }
  }
  fprintf( fp, "End\n\n" );
  fclose( fp );
  return;
}

bool load_alliance(  )
{
  FILE *fp;
  char buf[MAX_STRING_LENGTH];
  ALLIANCE_DATA *alliance = NULL;

  log_string( "Loading alliance data" );

  sprintf( buf, "%salliance", CLAN_DIR );

  if( ( fp = fopen( buf, "r" ) ) == NULL )
  {
    bug( "Cannot open alliance list for reading" );
    return FALSE;
  }

  for( ;; )
  {
    char *word;

    word = fread_word( fp );

    if( !str_cmp( word, "Alliance" ) )
    {
      CREATE( alliance, ALLIANCE_DATA, 1 );
      alliance->clan = get_clan( fread_string( fp ) );
      alliance->vclan = get_clan( fread_string( fp ) );
      alliance->status = fread_number( fp );
      alliance->vclanStatus = fread_number( fp );
      alliance->votes = fread_number( fp );
      alliance->leader1Vote = fread_string( fp );
      alliance->leader2Vote = fread_string( fp );
      if( !alliance->leader1Vote || alliance->leader1Vote[0] == '\0' || alliance->leader1Vote == NULL )
        alliance->leader1Vote = STRALLOC( "None" );
      if( !alliance->leader2Vote || alliance->leader2Vote[0] == '\0' || alliance->leader2Vote == NULL )
        alliance->leader2Vote = STRALLOC( "None" );
      LINK( alliance, first_alliance, last_alliance, next, prev );
      continue;
    }
    else if( !str_cmp( word, "End" ) )
    {
      LINK( alliance, first_alliance, last_alliance, next, prev );
      fclose( fp );
      return TRUE;
    }
    else
    {
      bug( "load_alliance: bad section" );
      fclose( fp );
      return FALSE;
    }
  }

}

void write_clan_list(  )
{
  CLAN_DATA *tclan;
  FILE *fpout;
  char filename[256];

  sprintf( filename, "%s%s", CLAN_DIR, CLAN_LIST );
  fpout = fopen( filename, "w" );
  if( !fpout )
  {
    bug( "FATAL: cannot open clan.lst for writing!\n\r", 0 );
    return;
  }
  for( tclan = first_clan; tclan; tclan = tclan->next )
    fprintf( fpout, "%s\n", tclan->filename );
  fprintf( fpout, "$\n" );
  fclose( fpout );
}

void write_council_list(  )
{
  COUNCIL_DATA *tcouncil;
  FILE *fpout;
  char filename[256];

  sprintf( filename, "%s%s", COUNCIL_DIR, COUNCIL_LIST );
  fpout = fopen( filename, "w" );
  if( !fpout )
  {
    bug( "FATAL: cannot open council.lst for writing!\n\r", 0 );
    return;
  }
  for( tcouncil = first_council; tcouncil; tcouncil = tcouncil->next )
    fprintf( fpout, "%s\n", tcouncil->filename );
  fprintf( fpout, "$\n" );
  fclose( fpout );
}

/*
 * Save a clan's data to its data file
 */
void save_clan( CLAN_DATA * clan )
{
  FILE *fp;
  char filename[256];
  char buf[MAX_STRING_LENGTH];

  if( !clan )
  {
    bug( "save_clan: null clan pointer!", 0 );
    return;
  }

  if( !clan->filename || clan->filename[0] == '\0' )
  {
    sprintf( buf, "save_clan: %s has no filename", clan->name );
    bug( buf, 0 );
    return;
  }

  sprintf( filename, "%s%s", CLAN_DIR, clan->filename );

  fclose( fpReserve );
  if( ( fp = fopen( filename, "w" ) ) == NULL )
  {
    bug( "save_clan: fopen", 0 );
    perror( filename );
  }
  else
  {
    fprintf( fp, "#CLAN\n" );
    fprintf( fp, "Name         %s~\n", clan->name );
    fprintf( fp, "ShortName    %s~\n", clan->short_name );
    fprintf( fp, "Filename     %s~\n", clan->filename );
    fprintf( fp, "Motto        %s~\n", clan->motto );
    fprintf( fp, "Description  %s~\n", clan->description );
    if( clan->clanHQ )
      fprintf( fp, "ClanHQ       %s~\n", clan->clanHQ->filename );
    fprintf( fp, "Deity        %s~\n", clan->deity );
    fprintf( fp, "Owner	   %s~\n", clan->owner );
    fprintf( fp, "Leader1      %s~\n", clan->leader1 );
    fprintf( fp, "Leader2      %s~\n", clan->leader2 );
    fprintf( fp, "Leader3      %s~\n", clan->leader3 );
    fprintf( fp, "Leader4      %s~\n", clan->leader4 );
    fprintf( fp, "Leader5      %s~\n", clan->leader5 );
    fprintf( fp, "Leader6      %s~\n", clan->leader6 );
    fprintf( fp, "Badge        %s~\n", clan->badge );
    fprintf( fp, "MaleRank1    %s~\n", clan->mRank1 );
    fprintf( fp, "MaleRank2    %s~\n", clan->mRank2 );
    fprintf( fp, "MaleRank3    %s~\n", clan->mRank3 );
    fprintf( fp, "MaleRank4    %s~\n", clan->mRank4 );
    fprintf( fp, "MaleRank5    %s~\n", clan->mRank5 );
    fprintf( fp, "MaleRank6    %s~\n", clan->mRank6 );
    fprintf( fp, "MaleRank7    %s~\n", clan->mRank7 );
    fprintf( fp, "FemaleRank1  %s~\n", clan->fRank1 );
    fprintf( fp, "FemaleRank2  %s~\n", clan->fRank2 );
    fprintf( fp, "FemaleRank3  %s~\n", clan->fRank3 );
    fprintf( fp, "FemaleRank4  %s~\n", clan->fRank4 );
    fprintf( fp, "FemaleRank5  %s~\n", clan->fRank5 );
    fprintf( fp, "FemaleRank6  %s~\n", clan->fRank6 );
    fprintf( fp, "FemaleRank7  %s~\n", clan->fRank7 );
    fprintf( fp, "MaleRank1C   %d\n", clan->mRank1Count );
    fprintf( fp, "MaleRank2C   %d\n", clan->mRank2Count );
    fprintf( fp, "MaleRank3C   %d\n", clan->mRank3Count );
    fprintf( fp, "MaleRank4C   %d\n", clan->mRank4Count );
    fprintf( fp, "MaleRank5C   %d\n", clan->mRank5Count );
    fprintf( fp, "MaleRank6C   %d\n", clan->mRank6Count );
    fprintf( fp, "MaleRank7C   %d\n", clan->mRank7Count );
    fprintf( fp, "FemaleRank1C %d\n", clan->fRank1Count );
    fprintf( fp, "FemaleRank2C %d\n", clan->fRank2Count );
    fprintf( fp, "FemaleRank3C %d\n", clan->fRank3Count );
    fprintf( fp, "FemaleRank4C %d\n", clan->fRank4Count );
    fprintf( fp, "FemaleRank5C %d\n", clan->fRank5Count );
    fprintf( fp, "FemaleRank6C %d\n", clan->fRank6Count );
    fprintf( fp, "FemaleRank7C %d\n", clan->fRank7Count );

    fprintf( fp, "PKillRangeNew   %d %d %d %d %d %d %d\n",
             clan->pkills[0], clan->pkills[1], clan->pkills[2],
             clan->pkills[3], clan->pkills[4], clan->pkills[5], clan->pkills[6] );
    fprintf( fp, "PDeathRangeNew  %d %d %d %d %d %d %d\n",
             clan->pdeaths[0], clan->pdeaths[1], clan->pdeaths[2],
             clan->pdeaths[3], clan->pdeaths[4], clan->pdeaths[5], clan->pdeaths[6] );
    fprintf( fp, "SparWinsRangeNew   %d %d %d %d %d %d %d\n",
             clan->spar_wins[0], clan->spar_wins[1], clan->spar_wins[2],
             clan->spar_wins[3], clan->spar_wins[4], clan->spar_wins[5], clan->spar_wins[6] );
    fprintf( fp, "SparLossRangeNew   %d %d %d %d %d %d %d\n",
             clan->spar_loss[0], clan->spar_loss[1], clan->spar_loss[2],
             clan->spar_loss[3], clan->spar_loss[4], clan->spar_loss[5], clan->spar_loss[6] );
    fprintf( fp, "MKills       %d\n", clan->mkills );
    fprintf( fp, "MDeaths      %d\n", clan->mdeaths );
    fprintf( fp, "IllegalPK    %d\n", clan->illegal_pk );
    fprintf( fp, "Score        %d\n", clan->score );
    /*
     * fprintf( fp, "ClanPL       %.0Lf\n", clan->clanPL    );
     */
    fprintf( fp, "Type         %d\n", clan->clan_type );
    fprintf( fp, "Class        %d\n", clan->class );
    fprintf( fp, "Favour       %d\n", clan->favour );
    fprintf( fp, "Strikes      %d\n", clan->strikes );
    fprintf( fp, "Members      %d\n", clan->members );
    fprintf( fp, "Active       %d\n", clan->activeMem );
    fprintf( fp, "MemLimit     %d\n", clan->mem_limit );
    fprintf( fp, "Alignment    %d\n", clan->alignment );
    fprintf( fp, "Board        %d\n", clan->board );
    fprintf( fp, "ClanObjOne   %d\n", clan->clanobj1 );
    fprintf( fp, "ClanObjTwo   %d\n", clan->clanobj2 );
    fprintf( fp, "ClanObjThree %d\n", clan->clanobj3 );
    fprintf( fp, "ClanObjFour  %d\n", clan->clanobj4 );
    fprintf( fp, "ClanObjFive  %d\n", clan->clanobj5 );
    fprintf( fp, "Recall       %d\n", clan->recall );
    fprintf( fp, "Storeroom    %d\n", clan->storeroom );
    fprintf( fp, "DeathRecall  %d\n", clan->deathRecall );
    fprintf( fp, "Morgue       %d\n", clan->clanMorgue );
    fprintf( fp, "Donate       %d\n", clan->clanDonate );
    fprintf( fp, "Jail         %d\n", clan->clanJail );
    fprintf( fp, "GuardOne     %d\n", clan->guard1 );
    fprintf( fp, "GuardTwo     %d\n", clan->guard2 );
    fprintf( fp, "ClanSkill1   %d\n", clan->clanSkill1 );
    fprintf( fp, "ClanSkill2   %d\n", clan->clanSkill2 );
    fprintf( fp, "ClanSkill3   %d\n", clan->clanSkill3 );
    fprintf( fp, "URL          %s~\n", clan->clanWebSite );
    fprintf( fp, "TaxRate      %d\n", clan->tax );
    fprintf( fp, "Bank         %.0Lf\n", clan->bank );
    fprintf( fp, "End\n\n" );
    fprintf( fp, "#END\n" );
  }
  fclose( fp );
  fpReserve = fopen( NULL_FILE, "r" );
  return;
}

/*
 * Save a council's data to its data file
 */
void save_council( COUNCIL_DATA * council )
{
  FILE *fp;
  char filename[256];
  char buf[MAX_STRING_LENGTH];

  if( !council )
  {
    bug( "save_council: null council pointer!", 0 );
    return;
  }

  if( !council->filename || council->filename[0] == '\0' )
  {
    sprintf( buf, "save_council: %s has no filename", council->name );
    bug( buf, 0 );
    return;
  }

  sprintf( filename, "%s%s", COUNCIL_DIR, council->filename );

  fclose( fpReserve );
  if( ( fp = fopen( filename, "w" ) ) == NULL )
  {
    bug( "save_council: fopen", 0 );
    perror( filename );
  }
  else
  {

    fprintf( fp, "#COUNCIL\n" );
    if( council->name )
      fprintf( fp, "Name         %s~\n", council->name );
    if( council->filename )
      fprintf( fp, "Filename     %s~\n", council->filename );
    if( council->description )
      fprintf( fp, "Description  %s~\n", council->description );
    if( council->head )
      fprintf( fp, "Head         %s~\n", council->head );
    if( council->head2 != NULL )
      fprintf( fp, "Head2        %s~\n", council->head2 );
    fprintf( fp, "Members      %d\n", council->members );
    fprintf( fp, "Board        %d\n", council->board );
    fprintf( fp, "Meeting      %d\n", council->meeting );
    if( council->powers )
      fprintf( fp, "Powers       %s~\n", council->powers );
    fprintf( fp, "End\n\n" );
    fprintf( fp, "#END\n" );
  }
  fclose( fp );
  fpReserve = fopen( NULL_FILE, "r" );
  return;
}


/*
 * Read in actual clan data.
 */

#if defined(KEY)
#undef KEY
#endif

#define KEY( literal, field, value )					\
				if ( !str_cmp( word, literal ) )	\
				{					\
				    field  = value;			\
				    fMatch = TRUE;			\
				    break;				\
				}

/*
 * Reads in PKill and PDeath still for backward compatibility but now it
 * should be written to PKillRange and PDeathRange for multiple level pkill
 * tracking support. --Shaddai
 * Added a hardcoded limit memlimit to the amount of members a clan can
 * have set using setclan.  --Shaddai
 */

void fread_clan( CLAN_DATA * clan, FILE * fp )
{
  char buf[MAX_STRING_LENGTH];
  char *word;
  bool fMatch;


  clan->mem_limit = 0;  /* Set up defaults */
  for( ;; )
  {
    word = feof( fp ) ? "End" : fread_word( fp );
    fMatch = FALSE;

    switch ( UPPER( word[0] ) )
    {
      case '*':
        fMatch = TRUE;
        fread_to_eol( fp );
        break;

      case 'A':
        KEY( "Alignment", clan->alignment, fread_number( fp ) );
        KEY( "Active", clan->activeMem, fread_number( fp ) );
        break;

      case 'B':
        KEY( "Badge", clan->badge, fread_string( fp ) );
        KEY( "Bank", clan->bank, fread_number_ld( fp ) );
        /*
         * KEY( "Bank", clan->bank,   fread_number_skill( fp ) ); //used skill since it reads doubles
         */
        KEY( "Board", clan->board, fread_number( fp ) );
        break;

      case 'C':
        if( !str_cmp( word, "ClanHQ" ) )
        {
          AREA_DATA *clanHQ;
          char fname[MAX_STRING_LENGTH];

          sprintf( fname, "%s", fread_string( fp ) );

          for( clanHQ = first_area; clanHQ; clanHQ = clanHQ->next )
          {
            if( !str_cmp( clanHQ->filename, fname ) )
            {
              clan->clanHQ = clanHQ;
              break;
            }
          }
          fMatch = TRUE;
        }
        KEY( "ClanSkill1", clan->clanSkill1, fread_number( fp ) );
        KEY( "ClanSkill2", clan->clanSkill2, fread_number( fp ) );
        KEY( "ClanSkill3", clan->clanSkill3, fread_number( fp ) );
        KEY( "ClanObjOne", clan->clanobj1, fread_number( fp ) );
        KEY( "ClanObjTwo", clan->clanobj2, fread_number( fp ) );
        KEY( "ClanObjThree", clan->clanobj3, fread_number( fp ) );
        KEY( "ClanObjFour", clan->clanobj4, fread_number( fp ) );
        KEY( "ClanObjFive", clan->clanobj5, fread_number( fp ) );
        KEY( "Class", clan->class, fread_number( fp ) );
        /*
         * KEY( "ClanPL", clan->clanPL,   fread_number_ld( fp ) );
         */
        break;

      case 'D':
        KEY( "DeathRecall", clan->deathRecall, fread_number( fp ) );
        KEY( "Donate", clan->clanDonate, fread_number( fp ) );
        KEY( "Deity", clan->deity, fread_string( fp ) );
        KEY( "Description", clan->description, fread_string( fp ) );
        break;

      case 'E':
        if( !str_cmp( word, "End" ) )
        {
          if( !clan->name )
            clan->name = STRALLOC( "" );
          if( !clan->leader1 )
            clan->leader1 = STRALLOC( "" );
          if( !clan->leader2 )
            clan->leader2 = STRALLOC( "" );
          if( !clan->leader3 )
            clan->leader3 = STRALLOC( "" );
          if( !clan->leader4 )
            clan->leader4 = STRALLOC( "" );
          if( !clan->leader5 )
            clan->leader5 = STRALLOC( "" );
          if( !clan->leader6 )
            clan->leader6 = STRALLOC( "" );
          if( !clan->description )
            clan->description = STRALLOC( "" );
          if( !clan->motto )
            clan->motto = STRALLOC( "" );
          if( !clan->deity )
            clan->deity = STRALLOC( "" );
          if( !clan->badge )
            clan->badge = STRALLOC( "" );
          if( !clan->clanWebSite )
            clan->clanWebSite = STRALLOC( "" );
          if( !clan->clanHQ )
            clan->clanHQ = NULL;
          if( !clan->mRank1 )
            clan->mRank1 = STRALLOC( "" );
          if( !clan->mRank2 )
            clan->mRank2 = STRALLOC( "" );
          if( !clan->mRank3 )
            clan->mRank3 = STRALLOC( "" );
          if( !clan->mRank4 )
            clan->mRank4 = STRALLOC( "" );
          if( !clan->mRank5 )
            clan->mRank5 = STRALLOC( "" );
          if( !clan->mRank6 )
            clan->mRank6 = STRALLOC( "" );
          if( !clan->mRank7 )
            clan->mRank7 = STRALLOC( "" );
          if( !clan->fRank1 )
            clan->fRank1 = STRALLOC( "" );
          if( !clan->fRank2 )
            clan->fRank2 = STRALLOC( "" );
          if( !clan->fRank3 )
            clan->fRank3 = STRALLOC( "" );
          if( !clan->fRank4 )
            clan->fRank4 = STRALLOC( "" );
          if( !clan->fRank5 )
            clan->fRank5 = STRALLOC( "" );
          if( !clan->fRank6 )
            clan->fRank6 = STRALLOC( "" );
          if( !clan->fRank7 )
            clan->fRank7 = STRALLOC( "" );
          clan->members = clan->fRank1Count + clan->fRank2Count + clan->fRank3Count + clan->fRank4Count;
          clan->members += clan->fRank5Count + clan->fRank6Count + clan->fRank7Count;
          clan->members += clan->mRank1Count + clan->mRank2Count + clan->mRank3Count + clan->mRank4Count;
          clan->members += clan->mRank5Count + clan->mRank6Count + clan->mRank7Count;
          return;
        }
        break;

      case 'F':
        KEY( "Favour", clan->favour, fread_number( fp ) );
        KEY( "Filename", clan->filename, fread_string_nohash( fp ) );
        KEY( "FemaleRank1", clan->fRank1, fread_string( fp ) );
        KEY( "FemaleRank2", clan->fRank2, fread_string( fp ) );
        KEY( "FemaleRank3", clan->fRank3, fread_string( fp ) );
        KEY( "FemaleRank4", clan->fRank4, fread_string( fp ) );
        KEY( "FemaleRank5", clan->fRank5, fread_string( fp ) );
        KEY( "FemaleRank6", clan->fRank6, fread_string( fp ) );
        KEY( "FemaleRank7", clan->fRank7, fread_string( fp ) );
        KEY( "FemaleRank1C", clan->fRank1Count, fread_number( fp ) );
        KEY( "FemaleRank2C", clan->fRank2Count, fread_number( fp ) );
        KEY( "FemaleRank3C", clan->fRank3Count, fread_number( fp ) );
        KEY( "FemaleRank4C", clan->fRank4Count, fread_number( fp ) );
        KEY( "FemaleRank5C", clan->fRank5Count, fread_number( fp ) );
        KEY( "FemaleRank6C", clan->fRank6Count, fread_number( fp ) );
        KEY( "FemaleRank7C", clan->fRank7Count, fread_number( fp ) );
        break;

      case 'G':
        KEY( "GuardOne", clan->guard1, fread_number( fp ) );
        KEY( "GuardTwo", clan->guard2, fread_number( fp ) );
        break;

      case 'I':
        KEY( "IllegalPK", clan->illegal_pk, fread_number( fp ) );
        break;

      case 'J':
        KEY( "Jail", clan->clanJail, fread_number( fp ) );
        break;

      case 'L':
        KEY( "Leader1", clan->leader1, fread_string( fp ) );
        KEY( "Leader2", clan->leader2, fread_string( fp ) );
        KEY( "Leader3", clan->leader3, fread_string( fp ) );
        KEY( "Leader4", clan->leader4, fread_string( fp ) );
        KEY( "Leader5", clan->leader5, fread_string( fp ) );
        KEY( "Leader6", clan->leader6, fread_string( fp ) );
        break;

      case 'M':
        KEY( "MDeaths", clan->mdeaths, fread_number( fp ) );
        KEY( "Members", clan->members, fread_number( fp ) );
        KEY( "MemLimit", clan->mem_limit, fread_number( fp ) );
        KEY( "MKills", clan->mkills, fread_number( fp ) );
        KEY( "Motto", clan->motto, fread_string( fp ) );
        KEY( "MaleRank1", clan->mRank1, fread_string( fp ) );
        KEY( "MaleRank2", clan->mRank2, fread_string( fp ) );
        KEY( "MaleRank3", clan->mRank3, fread_string( fp ) );
        KEY( "MaleRank4", clan->mRank4, fread_string( fp ) );
        KEY( "MaleRank5", clan->mRank5, fread_string( fp ) );
        KEY( "MaleRank6", clan->mRank6, fread_string( fp ) );
        KEY( "MaleRank7", clan->mRank7, fread_string( fp ) );
        KEY( "MaleRank1C", clan->mRank1Count, fread_number( fp ) );
        KEY( "MaleRank2C", clan->mRank2Count, fread_number( fp ) );
        KEY( "MaleRank3C", clan->mRank3Count, fread_number( fp ) );
        KEY( "MaleRank4C", clan->mRank4Count, fread_number( fp ) );
        KEY( "MaleRank5C", clan->mRank5Count, fread_number( fp ) );
        KEY( "MaleRank6C", clan->mRank6Count, fread_number( fp ) );
        KEY( "MaleRank7C", clan->mRank7Count, fread_number( fp ) );
        KEY( "Morgue", clan->clanMorgue, fread_number( fp ) );
        break;

      case 'N':
        KEY( "Name", clan->name, fread_string( fp ) );
        break;

      case 'O':
        KEY( "Owner", clan->owner, fread_string( fp ) );
        break;

      case 'P':
        KEY( "PDeaths", clan->pdeaths[6], fread_number( fp ) );
        KEY( "PKills", clan->pkills[6], fread_number( fp ) );
        /*
         * Addition of New Ranges 
         */
        if( !str_cmp( word, "PDeathRange" ) )
        {
          fMatch = TRUE;
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
        }
        if( !str_cmp( word, "PDeathRangeNew" ) )
        {
          fMatch = TRUE;
          clan->pdeaths[0] = fread_number( fp );
          clan->pdeaths[1] = fread_number( fp );
          clan->pdeaths[2] = fread_number( fp );
          clan->pdeaths[3] = fread_number( fp );
          clan->pdeaths[4] = fread_number( fp );
          clan->pdeaths[5] = fread_number( fp );
          clan->pdeaths[6] = fread_number( fp );
        }
        if( !str_cmp( word, "PKillRangeNew" ) )
        {
          fMatch = TRUE;
          clan->pkills[0] = fread_number( fp );
          clan->pkills[1] = fread_number( fp );
          clan->pkills[2] = fread_number( fp );
          clan->pkills[3] = fread_number( fp );
          clan->pkills[4] = fread_number( fp );
          clan->pkills[5] = fread_number( fp );
          clan->pkills[6] = fread_number( fp );
        }
        if( !str_cmp( word, "PKillRange" ) )
        {
          fMatch = TRUE;
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
          fread_number( fp );
        }
        break;

      case 'R':
        KEY( "Recall", clan->recall, fread_number( fp ) );
        break;

      case 'S':
        KEY( "ShortName", clan->short_name, fread_string( fp ) );
        KEY( "Score", clan->score, fread_number( fp ) );
        if( !str_cmp( word, "SparLossRangeNew" ) )
        {
          fMatch = TRUE;
          clan->spar_loss[0] = fread_number( fp );
          clan->spar_loss[1] = fread_number( fp );
          clan->spar_loss[2] = fread_number( fp );
          clan->spar_loss[3] = fread_number( fp );
          clan->spar_loss[4] = fread_number( fp );
          clan->spar_loss[5] = fread_number( fp );
          clan->spar_loss[6] = fread_number( fp );
        }
        if( !str_cmp( word, "SparWinsRangeNew" ) )
        {
          fMatch = TRUE;
          clan->spar_wins[0] = fread_number( fp );
          clan->spar_wins[1] = fread_number( fp );
          clan->spar_wins[2] = fread_number( fp );
          clan->spar_wins[3] = fread_number( fp );
          clan->spar_wins[4] = fread_number( fp );
          clan->spar_wins[5] = fread_number( fp );
          clan->spar_wins[6] = fread_number( fp );
        }
        KEY( "Strikes", clan->strikes, fread_number( fp ) );
        KEY( "Storeroom", clan->storeroom, fread_number( fp ) );
        break;

      case 'T':
        KEY( "TaxRate", clan->tax, fread_number( fp ) );
        KEY( "Type", clan->clan_type, fread_number( fp ) );
        break;

      case 'U':
        KEY( "URL", clan->clanWebSite, fread_string( fp ) );
        break;
    }

    if( !fMatch )
    {
      sprintf( buf, "Fread_clan: no match: %s", word );
      bug( buf, 0 );
    }
  }

  /*
   * Why the FUCK was this put down here?!
   * clan->members = clan->fRank1Count + clan->fRank2Count + clan->fRank3Count + clan->fRank4Count;
   * clan->members+= clan->fRank5Count + clan->fRank6Count + clan->fRank7Count;
   * clan->members+= clan->mRank1Count + clan->mRank2Count + clan->mRank3Count + clan->mRank4Count;
   * clan->members+= clan->mRank5Count + clan->mRank6Count + clan->mRank7Count;
   */
}

/*
 * Read in actual council data.
 */

#if defined(KEY)
#undef KEY
#endif

#define KEY( literal, field, value )					\
				if ( !str_cmp( word, literal ) )	\
				{					\
				    field  = value;			\
				    fMatch = TRUE;			\
				    break;				\
				}

void fread_council( COUNCIL_DATA * council, FILE * fp )
{
  char buf[MAX_STRING_LENGTH];
  char *word;
  bool fMatch;

  for( ;; )
  {
    word = feof( fp ) ? "End" : fread_word( fp );
    fMatch = FALSE;

    switch ( UPPER( word[0] ) )
    {
      case '*':
        fMatch = TRUE;
        fread_to_eol( fp );
        break;

      case 'B':
        KEY( "Board", council->board, fread_number( fp ) );
        break;

      case 'D':
        KEY( "Description", council->description, fread_string( fp ) );
        break;

      case 'E':
        if( !str_cmp( word, "End" ) )
        {
          if( !council->name )
            council->name = STRALLOC( "" );
          if( !council->description )
            council->description = STRALLOC( "" );
          if( !council->powers )
            council->powers = STRALLOC( "" );
          return;
        }
        break;

      case 'F':
        KEY( "Filename", council->filename, fread_string_nohash( fp ) );
        break;

      case 'H':
        KEY( "Head", council->head, fread_string( fp ) );
        KEY( "Head2", council->head2, fread_string( fp ) );
        break;

      case 'M':
        KEY( "Members", council->members, fread_number( fp ) );
        KEY( "Meeting", council->meeting, fread_number( fp ) );
        break;

      case 'N':
        KEY( "Name", council->name, fread_string( fp ) );
        break;

      case 'P':
        KEY( "Powers", council->powers, fread_string( fp ) );
        break;
    }

    if( !fMatch )
    {
      sprintf( buf, "Fread_council: no match: %s", word );
      bug( buf, 0 );
    }
  }
}


/*
 * Load a clan file
 */

bool load_clan_file( char *clanfile )
{
  char filename[256];
  CLAN_DATA *clan;
  FILE *fp;
  bool found;

  CREATE( clan, CLAN_DATA, 1 );

  /*
   * Make sure we default these to 0 --Shaddai 
   */
  clan->pkills[0] = 0;
  clan->pkills[1] = 0;
  clan->pkills[2] = 0;
  clan->pkills[3] = 0;
  clan->pkills[4] = 0;
  clan->pkills[5] = 0;
  clan->pkills[6] = 0;
  clan->pdeaths[0] = 0;
  clan->pdeaths[1] = 0;
  clan->pdeaths[2] = 0;
  clan->pdeaths[3] = 0;
  clan->pdeaths[4] = 0;
  clan->pdeaths[5] = 0;
  clan->pdeaths[6] = 0;
  clan->spar_wins[0] = 0;
  clan->spar_wins[1] = 0;
  clan->spar_wins[2] = 0;
  clan->spar_wins[3] = 0;
  clan->spar_wins[4] = 0;
  clan->spar_wins[5] = 0;
  clan->spar_wins[6] = 0;
  clan->spar_loss[0] = 0;
  clan->spar_loss[1] = 0;
  clan->spar_loss[2] = 0;
  clan->spar_loss[3] = 0;
  clan->spar_loss[4] = 0;
  clan->spar_loss[5] = 0;
  clan->spar_loss[6] = 0;

  clan->bank = 0;

  found = FALSE;
  sprintf( filename, "%s%s", CLAN_DIR, clanfile );

  if( ( fp = fopen( filename, "r" ) ) != NULL )
  {

    found = TRUE;
    for( ;; )
    {
      char letter;
      char *word;

      letter = fread_letter( fp );
      if( letter == '*' )
      {
        fread_to_eol( fp );
        continue;
      }

      if( letter != '#' )
      {
        bug( "Load_clan_file: # not found.", 0 );
        break;
      }

      word = fread_word( fp );
      if( !str_cmp( word, "CLAN" ) )
      {
        fread_clan( clan, fp );
        break;
      }
      else if( !str_cmp( word, "END" ) )
        break;
      else
      {
        char buf[MAX_STRING_LENGTH];

        sprintf( buf, "Load_clan_file: bad section: %s.", word );
        bug( buf, 0 );
        break;
      }
    }
    fclose( fp );
  }

  if( found )
  {
    LINK( clan, first_clan, last_clan, next, prev );
  }
  else
    DISPOSE( clan );


  return found;
}

/*
 * Load a council file
 */

bool load_council_file( char *councilfile )
{
  char filename[256];
  COUNCIL_DATA *council;
  FILE *fp;
  bool found;

  CREATE( council, COUNCIL_DATA, 1 );

  found = FALSE;
  sprintf( filename, "%s%s", COUNCIL_DIR, councilfile );

  if( ( fp = fopen( filename, "r" ) ) != NULL )
  {

    found = TRUE;
    for( ;; )
    {
      char letter;
      char *word;

      letter = fread_letter( fp );
      if( letter == '*' )
      {
        fread_to_eol( fp );
        continue;
      }

      if( letter != '#' )
      {
        bug( "Load_council_file: # not found.", 0 );
        break;
      }

      word = fread_word( fp );
      if( !str_cmp( word, "COUNCIL" ) )
      {
        fread_council( council, fp );
        break;
      }
      else if( !str_cmp( word, "END" ) )
        break;
      else
      {
        bug( "Load_council_file: bad section.", 0 );
        break;
      }
    }
    fclose( fp );
  }

  if( found )
    LINK( council, first_council, last_council, next, prev );

  else
    DISPOSE( council );

  return found;
}

/*
 * Load in all the clan files.
 */
void load_clans(  )
{
  FILE *fpList;
  char *filename;
  char clanlist[256];
  char buf[MAX_STRING_LENGTH];


  first_clan = NULL;
  last_clan = NULL;

  log_string( "Loading clans..." );

  sprintf( clanlist, "%s%s", CLAN_DIR, CLAN_LIST );
  fclose( fpReserve );
  if( ( fpList = fopen( clanlist, "r" ) ) == NULL )
  {
    perror( clanlist );
    exit( 1 );
  }

  for( ;; )
  {
    filename = feof( fpList ) ? "$" : fread_word( fpList );
    log_string( filename );
    if( filename[0] == '$' )
      break;

    if( !load_clan_file( filename ) )
    {
      sprintf( buf, "Cannot load clan file: %s", filename );
      bug( buf, 0 );
    }
  }

  load_alliance(  );

  fclose( fpList );
  log_string( " Done clans " );
  fpReserve = fopen( NULL_FILE, "r" );
  return;
}

/*
 * Load in all the council files.
 */
void load_councils(  )
{
  FILE *fpList;
  char *filename;
  char councillist[256];
  char buf[MAX_STRING_LENGTH];


  first_council = NULL;
  last_council = NULL;

  log_string( "Loading councils..." );

  sprintf( councillist, "%s%s", COUNCIL_DIR, COUNCIL_LIST );
  fclose( fpReserve );
  if( ( fpList = fopen( councillist, "r" ) ) == NULL )
  {
    perror( councillist );
    exit( 1 );
  }

  for( ;; )
  {
    filename = feof( fpList ) ? "$" : fread_word( fpList );
    log_string( filename );
    if( filename[0] == '$' )
      break;

    if( !load_council_file( filename ) )
    {
      sprintf( buf, "Cannot load council file: %s", filename );
      bug( buf, 0 );
    }
  }
  fclose( fpList );
  log_string( " Done councils " );
  fpReserve = fopen( NULL_FILE, "r" );
  return;
}

void do_savealliances( CHAR_DATA * ch, char *argument )
{
  if( ch->level < 63 )
  {
    ch_printf( ch, "Access denied.\n\r" );
    return;
  }
  save_alliance(  );
  ch_printf( ch, "Done.\n\r" );
  return;
}

void do_make( CHAR_DATA * ch, char *argument )
{
  char arg[MAX_INPUT_LENGTH];
  OBJ_INDEX_DATA *pObjIndex;
  OBJ_DATA *obj;
  CLAN_DATA *clan;
  int level;

  if( IS_NPC( ch ) || !ch->pcdata->clan )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  clan = ch->pcdata->clan;

  if( !is_leader( ch ) && !is_deity( ch ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  argument = one_argument( argument, arg );

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

  pObjIndex = get_obj_index( clan->clanobj1 );
  level = 40;

  if( !pObjIndex || !is_name( arg, pObjIndex->name ) )
  {
    pObjIndex = get_obj_index( clan->clanobj2 );
    level = 45;
  }
  if( !pObjIndex || !is_name( arg, pObjIndex->name ) )
  {
    pObjIndex = get_obj_index( clan->clanobj3 );
    level = 50;
  }
  if( !pObjIndex || !is_name( arg, pObjIndex->name ) )
  {
    pObjIndex = get_obj_index( clan->clanobj4 );
    level = 35;
  }
  if( !pObjIndex || !is_name( arg, pObjIndex->name ) )
  {
    pObjIndex = get_obj_index( clan->clanobj5 );
    level = 1;
  }

  if( !pObjIndex || !is_name( arg, pObjIndex->name ) )
  {
    send_to_char( "You don't know how to make that.\n\r", ch );
    return;
  }

  obj = create_object( pObjIndex, level );
  xSET_BIT( obj->extra_flags, ITEM_CLANOBJECT );
  if( CAN_WEAR( obj, ITEM_TAKE ) )
    obj = obj_to_char( obj, ch );
  else
    obj = obj_to_room( obj, ch->in_room );
  act( AT_MAGIC, "$n makes $p!", ch, obj, NULL, TO_ROOM );
  act( AT_MAGIC, "You make $p!", ch, obj, NULL, TO_CHAR );
  return;
}

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

  if( IS_NPC( ch ) || !ch->pcdata->clan )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  clan = ch->pcdata->clan;

  if( ( ch->pcdata && ch->pcdata->bestowments
        && is_name( "induct", ch->pcdata->bestowments ) ) || is_deity( ch ) || is_leader( ch ) )
    ;
  else
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  argument = one_argument( argument, arg );

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

  if( ( victim = get_char_room( ch, arg ) ) == NULL )
  {
    send_to_char( "That player is not here.\n\r", ch );
    return;
  }

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

  if( IS_IMMORTAL( victim ) )
  {
    send_to_char( "Not on imms.\n\r", ch );
    return;
  }

  if( clan->clan_type == CLAN_GUILD )
  {
    if( victim->class != clan->class )
    {
      send_to_char( "This player's will is not in accordance with your guild.\n\r", ch );
      return;
    }
  }
  else
  {
    if( victim->exp < 5000 )
    {
      send_to_char( "This player is not worthy of joining yet (5,000 PL min).\n\r", ch );
      return;
    }

  }

  /*
   * if( !xIS_SET( victim->act, PLR_CAN_CHAT ) )
   * {
   * send_to_char( "That player needs their bio authorized before they can join.\n\r", ch );
   * return;
   * }
   */

  if( victim->pcdata->clan )
  {
    if( victim->pcdata->clan->clan_type == CLAN_ORDER )
    {
      if( victim->pcdata->clan == clan )
        send_to_char( "This player already belongs to your order!\n\r", ch );
      else
        send_to_char( "This player already belongs to an order!\n\r", ch );
      return;
    }
    else if( victim->pcdata->clan->clan_type == CLAN_GUILD )
    {
      if( victim->pcdata->clan == clan )
        send_to_char( "This player already belongs to your guild!\n\r", ch );
      else
        send_to_char( "This player already belongs to an guild!\n\r", ch );
      return;
    }
    else
    {
      if( victim->pcdata->clan == clan )
        send_to_char( "This player already belongs to your clan!\n\r", ch );
      else
        send_to_char( "This player already belongs to a clan!\n\r", ch );
      return;
    }
  }
/*  if( clan->mem_limit && clan->members >= clan->mem_limit )
  {
    send_to_char( "Your clan is too big to induct anymore players.\n\r", ch );
    return;
  }*/

  /*
   * clan->members++; 
   */
  if( clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_GUILD )
    SET_BIT( victim->speaks, LANG_CLAN );

  if( clan->clan_type != CLAN_NOKILL && clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_GUILD )
    SET_BIT( victim->pcdata->flags, PCFLAG_DEADLY );

  if( clan->clan_type != CLAN_GUILD && clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_NOKILL )
  {
    int sn;

    for( sn = 0; sn < top_sn; sn++ )
    {
      if( skill_table[sn]->guild == clan->class && skill_table[sn]->name != NULL )
      {
        victim->pcdata->learned[sn] = GET_ADEPT( victim, sn );
        ch_printf( victim, "%s instructs you in the ways of %s.\n\r", ch->name, skill_table[sn]->name );
      }
    }
  }

  victim->pcdata->clanRank = 7;
  victim->pcdata->clanZeniDonated = 0;
  victim->pcdata->clanZeniClanTax = 0;
  victim->pcdata->clanItemsDonated = 0;
  if( victim->sex == SEX_FEMALE )
    clan->fRank7Count++;
  else
    clan->mRank7Count++;

  victim->pcdata->clan = clan;
  STRFREE( victim->pcdata->clan_name );
  victim->pcdata->clan_name = QUICKLINK( clan->name );


  /*
   * clan->clanPL += victim->exp;
   */

  if( xIS_SET( victim->act, PLR_OUTCAST ) )
    xREMOVE_BIT( victim->act, PLR_OUTCAST );

  update_member( victim );
  act( AT_MAGIC, "You recruit $N into $t", ch, clan->name, victim, TO_CHAR );
  act( AT_MAGIC, "$n recruits $N into $t", ch, clan->name, victim, TO_NOTVICT );
  act( AT_MAGIC, "$n recruits you into $t", ch, clan->name, victim, TO_VICT );
  clan->members = clan->fRank1Count + clan->fRank2Count + clan->fRank3Count + clan->fRank4Count;
  clan->members += clan->fRank5Count + clan->fRank6Count + clan->fRank7Count;
  clan->members += clan->mRank1Count + clan->mRank2Count + clan->mRank3Count + clan->mRank4Count;
  clan->members += clan->mRank5Count + clan->mRank6Count + clan->mRank7Count;
  save_char_obj( victim );
  save_clan( clan );
  return;
}

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

  if( IS_NPC( ch ) || !ch->pcdata->council )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  council = ch->pcdata->council;

  if( ( council->head == NULL || str_cmp( ch->name, council->head ) )
      && ( council->head2 == NULL || str_cmp( ch->name, council->head2 ) ) && str_cmp( council->name, "mortal council" ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  argument = one_argument( argument, arg );

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

  if( ( victim = get_char_room( ch, arg ) ) == NULL )
  {
    send_to_char( "That player is not here.\n\r", ch );
    return;
  }

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

/*    if ( victim->level < 51 )
    {
	send_to_char( "This player is not worthy of joining any council yet.\n\r", ch );
	return;
    }
*/
  if( victim->pcdata->council )
  {
    send_to_char( "This player already belongs to a council!\n\r", ch );
    return;
  }

  council->members++;
  victim->pcdata->council = council;
  STRFREE( victim->pcdata->council_name );
  victim->pcdata->council_name = QUICKLINK( council->name );
  act( AT_MAGIC, "You induct $N into $t", ch, council->name, victim, TO_CHAR );
  act( AT_MAGIC, "$n inducts $N into $t", ch, council->name, victim, TO_ROOM );
  act( AT_MAGIC, "$n inducts you into $t", ch, council->name, victim, TO_VICT );
  save_char_obj( victim );
  save_council( council );
  return;
}

void do_outcast( CHAR_DATA * ch, char *argument )
{
  char arg[MAX_INPUT_LENGTH];
  CHAR_DATA *victim;
  CLAN_DATA *clan;
  char buf[MAX_STRING_LENGTH];

  if( IS_NPC( ch ) || !ch->pcdata->clan )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  clan = ch->pcdata->clan;

  if( ( ch->pcdata && ch->pcdata->bestowments
        && is_name( "outcast", ch->pcdata->bestowments ) ) || is_deity( ch ) || is_leader( ch ) )
    ;
  else
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }


  argument = one_argument( argument, arg );

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

  if( ( victim = get_char_room( ch, arg ) ) == NULL )
  {
    send_to_char( "That player is not here.\n\r", ch );
    return;
  }

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

  if( IS_IMMORTAL( victim ) )
  {
    send_to_char( "Not on imms.\n\r", ch );
    return;
  }
  if( xIS_SET( victim->act, PLR_WAR1 ) || xIS_SET( victim->act, PLR_WAR2 ) )
  {
    send_to_char( "You want to outcast in the middle of a war!?\n\r", ch );
    return;
  }
  if( victim == ch )
  {
    if( ch->pcdata->clan->clan_type == CLAN_ORDER )
    {
      send_to_char( "Kick yourself out of your own order?\n\r", ch );
      return;
    }
    else if( ch->pcdata->clan->clan_type == CLAN_GUILD )
    {
      send_to_char( "Kick yourself out of your own guild?\n\r", ch );
      return;
    }
    else
    {
      send_to_char( "Kick yourself out of your own clan?\n\r", ch );
      return;
    }
  }

  if( victim->pcdata->clan != ch->pcdata->clan )
  {
    if( ch->pcdata->clan->clan_type == CLAN_ORDER )
    {
      send_to_char( "This player does not belong to your order!\n\r", ch );
      return;
    }
    else if( ch->pcdata->clan->clan_type == CLAN_GUILD )
    {
      send_to_char( "This player does not belong to your guild!\n\r", ch );
      return;
    }
    else
    {
      send_to_char( "This player does not belong to your clan!\n\r", ch );
      return;
    }
  }

  if( is_leader( victim ) || is_deity( victim ) )
  {
    send_to_char( "You can't outcast that player.\n\r", ch );
    return;
  }

  if( clan->clan_type != CLAN_GUILD && clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_NOKILL )
  {
    int sn;

    for( sn = 0; sn < top_sn; sn++ )
      if( skill_table[sn]->guild == victim->pcdata->clan->class && skill_table[sn]->name != NULL )
      {
        victim->pcdata->learned[sn] = 0;
        ch_printf( victim, "You forget the ways of %s.\n\r", skill_table[sn]->name );
      }
  }

  if( victim->speaking & LANG_CLAN )
    victim->speaking = LANG_COMMON;
  REMOVE_BIT( victim->speaks, LANG_CLAN );
  clan->members--;

  switch ( victim->pcdata->clanRank )
  {
    default:
      break;
    case 7:
      if( victim->sex == SEX_FEMALE )
        clan->fRank7Count--;
      else
        clan->mRank7Count--;
      break;
    case 6:
      if( victim->sex == SEX_FEMALE )
        clan->fRank6Count--;
      else
        clan->mRank6Count--;
      break;
    case 5:
      if( victim->sex == SEX_FEMALE )
        clan->fRank5Count--;
      else
        clan->mRank5Count--;
      break;
    case 4:
      if( victim->sex == SEX_FEMALE )
        clan->fRank4Count--;
      else
        clan->mRank4Count--;
      break;
    case 3:
      if( victim->sex == SEX_FEMALE )
        clan->fRank3Count--;
      else
        clan->mRank3Count--;
      break;
    case 2:
      if( victim->sex == SEX_FEMALE )
        clan->fRank2Count--;
      else
        clan->mRank2Count--;
      break;
    case 1:
      if( victim->sex == SEX_FEMALE )
        clan->fRank1Count--;
      else
        clan->mRank1Count--;
      break;
  }
  victim->pcdata->clanRank = 0;
  victim->pcdata->clan = NULL;
  remove_member( victim );
  STRFREE( victim->pcdata->clan_name );
  victim->pcdata->clan_name = STRALLOC( "" );


  /*
   * clan->clanPL -= victim->exp;
   */

  xSET_BIT( victim->act, PLR_OUTCAST );
  act( AT_MAGIC, "You outcast $N from $t", ch, clan->name, victim, TO_CHAR );
  act( AT_MAGIC, "$n outcasts $N from $t", ch, clan->name, victim, TO_ROOM );
  act( AT_MAGIC, "$n outcasts you from $t", ch, clan->name, victim, TO_VICT );
  if( clan->clan_type != CLAN_GUILD && clan->clan_type != CLAN_ORDER )
  {
    sprintf( buf, "%s has been outcast from %s!", victim->name, clan->name );
    echo_to_all( AT_MAGIC, buf, ECHOTAR_ALL );
  }

  save_char_obj( victim );  /* clan gets saved when pfile is saved */
  save_clan( clan );
  return;
}

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

  if( IS_NPC( ch ) || !ch->pcdata->council )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  council = ch->pcdata->council;

  if( ( council->head == NULL || str_cmp( ch->name, council->head ) )
      && ( council->head2 == NULL || str_cmp( ch->name, council->head2 ) ) && str_cmp( council->name, "mortal council" ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  argument = one_argument( argument, arg );

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

  if( ( victim = get_char_room( ch, arg ) ) == NULL )
  {
    send_to_char( "That player is not here.\n\r", ch );
    return;
  }

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

  if( victim == ch )
  {
    send_to_char( "Kick yourself out of your own council?\n\r", ch );
    return;
  }

  if( victim->pcdata->council != ch->pcdata->council )
  {
    send_to_char( "This player does not belong to your council!\n\r", ch );
    return;
  }

  --council->members;
  victim->pcdata->council = NULL;
  STRFREE( victim->pcdata->council_name );
  victim->pcdata->council_name = STRALLOC( "" );
  act( AT_MAGIC, "You outcast $N from $t", ch, council->name, victim, TO_CHAR );
  act( AT_MAGIC, "$n outcasts $N from $t", ch, council->name, victim, TO_ROOM );
  act( AT_MAGIC, "$n outcasts you from $t", ch, council->name, victim, TO_VICT );
  save_char_obj( victim );
  save_council( council );
  return;
}

bool is_owner( CHAR_DATA * ch, CLAN_DATA * clan )
{
  if( ch->pcdata->clan == clan )
  {
    if( !str_cmp( ch->name, clan->owner ) )
      return TRUE;
  }
  return FALSE;
}

void do_setclan( CHAR_DATA * ch, char *argument )
{
  char arg1[MAX_INPUT_LENGTH];
  char arg2[MAX_INPUT_LENGTH];
  CLAN_DATA *clan;

  set_char_color( AT_PLAIN, ch );
  if( IS_NPC( ch ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  argument = one_argument( argument, arg1 );
  argument = one_argument( argument, arg2 );
  if( arg1[0] == '\0' )
  {
    send_to_char( "Usage: setclan <clan> <field> <#/player>\n\r", ch );
    send_to_char( "\n\rField being one of:\n\r", ch );
    send_to_char( " admin leader1-6 mrank1-7 frank1-7\n\r", ch );
    send_to_char( " members board recall storage guard1 guard2\n\r", ch );
    send_to_char( " align memlimit deathrecall morgue donate\n\r", ch );
    send_to_char( " jail skill1-3 url tax bank active\n\r", ch );
    send_to_char( " obj1 obj2 obj3 obj4 obj5\n\r", ch );
    send_to_char( " mrankc1-7 frankc1-7\n\r", ch );
    if( get_trust( ch ) >= LEVEL_GOD )
    {
      send_to_char( " name filename motto desc clanhq\n\r", ch );
      send_to_char( " short favour strikes type class\n\r", ch );
      send_to_char( " owner \n\r", ch );
    }
    if( get_trust( ch ) >= LEVEL_IMPLEMENTOR )
      send_to_char( " pkill1-7 pdeath1-7 clanpl\n\r", ch );
    return;
  }

  clan = get_clan( arg1 );
  if( !clan )
  {
    send_to_char( "No such clan.\n\r", ch );
    return;
  }
  if( !str_cmp( arg2, "clanhq" ) )
  {
    AREA_DATA *clanHQ;
    for( clanHQ = first_area; clanHQ; clanHQ = clanHQ->next )
    {
      if( !str_cmp( clanHQ->filename, argument ) )
      {
        clan->clanHQ = clanHQ;
        send_to_char( "Done.\n\r", ch );
        return;
      }
    }
    send_to_char( "Area filename not found.\n\r", ch );
    return;
  }
  if( !str_cmp( arg2, "active" ) )
  {
    clan->activeMem = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  /*
   * Leave this uncommented unless there is a need to fix the alliance
   * data in the game. -Karma
   * if( !str_cmp(arg2,"fixalliance") )
   * {
   * newClanAlliance(clan);
   * ch_printf(ch,"Done.\n\r");
   * save_clan(clan);
   * return;
   * }
   */
  /*
   * if ( !str_cmp( arg2, "clanpl" ) )
   * {
   * clan->clanPL = atof( argument );
   * send_to_char( "Done.\n\r", ch );
   * save_clan( clan );
   * return;
   * }
   */
  if( !str_cmp( arg2, "admin" ) )
  {
    STRFREE( clan->deity );
    clan->deity = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "leader1" ) )
  {
    STRFREE( clan->leader1 );
    clan->leader1 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "owner" ) )
  {
    STRFREE( clan->owner );
    clan->owner = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "leader2" ) )
  {
    STRFREE( clan->leader2 );
    clan->leader2 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "leader3" ) )
  {
    STRFREE( clan->leader3 );
    clan->leader3 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "leader4" ) )
  {
    STRFREE( clan->leader4 );
    clan->leader4 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "leader5" ) )
  {
    STRFREE( clan->leader5 );
    clan->leader5 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "leader6" ) )
  {
    STRFREE( clan->leader6 );
    clan->leader6 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrankc1" ) )
  {
    clan->mRank1Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrankc2" ) )
  {
    clan->mRank2Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrankc3" ) )
  {
    clan->mRank3Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrankc4" ) )
  {
    clan->mRank4Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrankc5" ) )
  {
    clan->mRank5Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrankc6" ) )
  {
    clan->mRank6Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrankc7" ) )
  {
    clan->mRank7Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRankc1" ) )
  {
    clan->fRank1Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRankc2" ) )
  {
    clan->fRank2Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRankc3" ) )
  {
    clan->fRank3Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRankc4" ) )
  {
    clan->fRank4Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRankc5" ) )
  {
    clan->fRank5Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRankc6" ) )
  {
    clan->fRank6Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRankc7" ) )
  {
    clan->fRank7Count = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrank1" ) )
  {
    STRFREE( clan->mRank1 );
    clan->mRank1 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrank2" ) )
  {
    STRFREE( clan->mRank2 );
    clan->mRank2 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrank3" ) )
  {
    STRFREE( clan->mRank3 );
    clan->mRank3 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrank4" ) )
  {
    STRFREE( clan->mRank4 );
    clan->mRank4 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrank5" ) )
  {
    STRFREE( clan->mRank5 );
    clan->mRank5 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrank6" ) )
  {
    STRFREE( clan->mRank6 );
    clan->mRank6 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "mrank7" ) )
  {
    STRFREE( clan->mRank7 );
    clan->mRank7 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRank1" ) )
  {
    STRFREE( clan->fRank1 );
    clan->fRank1 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRank2" ) )
  {
    STRFREE( clan->fRank2 );
    clan->fRank2 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRank3" ) )
  {
    STRFREE( clan->fRank3 );
    clan->fRank3 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRank4" ) )
  {
    STRFREE( clan->fRank4 );
    clan->fRank4 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRank5" ) )
  {
    STRFREE( clan->fRank5 );
    clan->fRank5 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRank6" ) )
  {
    STRFREE( clan->fRank6 );
    clan->fRank6 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "fRank7" ) )
  {
    STRFREE( clan->fRank7 );
    clan->fRank7 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "badge" ) )
  {
    STRFREE( clan->badge );
    clan->badge = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "url" ) )
  {
    STRFREE( clan->clanWebSite );
    clan->clanWebSite = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "tax" ) )
  {
    clan->tax = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "bank" ) )
  {
    clan->bank = atof( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "board" ) )
  {
    clan->board = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "memlimit" ) )
  {
    clan->mem_limit = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "members" ) )
  {
    clan->members = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "recall" ) )
  {
    clan->recall = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "storage" ) )
  {
    clan->storeroom = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "deathrecall" ) )
  {
    clan->deathRecall = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "jail" ) )
  {
    clan->clanJail = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "morgue" ) )
  {
    clan->clanMorgue = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "donate" ) )
  {
    clan->clanDonate = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "skill1" ) )
  {
    clan->clanSkill1 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "skill2" ) )
  {
    clan->clanSkill2 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "skill3" ) )
  {
    clan->clanSkill3 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "obj1" ) )
  {
    clan->clanobj1 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "obj2" ) )
  {
    clan->clanobj2 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "obj3" ) )
  {
    clan->clanobj3 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "obj4" ) )
  {
    clan->clanobj4 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "obj5" ) )
  {
    clan->clanobj5 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "guard1" ) )
  {
    clan->guard1 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "guard2" ) )
  {
    clan->guard2 = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( get_trust( ch ) < LEVEL_GOD )
  {
    do_setclan( ch, "" );
    return;
  }
  if( !str_cmp( arg2, "align" ) )
  {
    clan->alignment = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "type" ) )
  {
    if( !str_cmp( argument, "order" ) )
      clan->clan_type = CLAN_ORDER;
    else if( !str_cmp( argument, "guild" ) )
      clan->clan_type = CLAN_GUILD;
    else
      clan->clan_type = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "class" ) )
  {
    clan->class = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "name" ) )
  {
    STRFREE( clan->name );
    clan->name = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "short" ) )
  {
    STRFREE( clan->short_name );
    clan->short_name = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "filename" ) )
  {
    if( clan->filename && clan->filename[0] != '\0' )
      DISPOSE( clan->filename );
    clan->filename = str_dup( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    write_clan_list(  );
    return;
  }
  if( !str_cmp( arg2, "motto" ) )
  {
    STRFREE( clan->motto );
    clan->motto = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg2, "desc" ) )
  {
    STRFREE( clan->description );
    clan->description = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( get_trust( ch ) < LEVEL_IMPLEMENTOR )
  {
    do_setclan( ch, "" );
    return;
  }

  if( !str_prefix( "pkill", arg2 ) )
  {
    int temp_value;
    if( !str_cmp( arg2, "pkill1" ) )
      temp_value = 0;
    else if( !str_cmp( arg2, "pkill2" ) )
      temp_value = 1;
    else if( !str_cmp( arg2, "pkill3" ) )
      temp_value = 2;
    else if( !str_cmp( arg2, "pkill4" ) )
      temp_value = 3;
    else if( !str_cmp( arg2, "pkill5" ) )
      temp_value = 4;
    else if( !str_cmp( arg2, "pkill6" ) )
      temp_value = 5;
    else if( !str_cmp( arg2, "pkill7" ) )
      temp_value = 6;
    else
    {
      do_setclan( ch, "" );
      return;
    }
    clan->pkills[temp_value] = atoi( argument );
    send_to_char( "Ok.\n\r", ch );
    return;
  }
  if( !str_prefix( "spar_wins", arg2 ) )
  {
    int temp_value;
    if( !str_cmp( arg2, "spar_wins1" ) )
      temp_value = 0;
    else if( !str_cmp( arg2, "spar_wins2" ) )
      temp_value = 1;
    else if( !str_cmp( arg2, "spar_wins3" ) )
      temp_value = 2;
    else if( !str_cmp( arg2, "spar_wins4" ) )
      temp_value = 3;
    else if( !str_cmp( arg2, "spar_wins5" ) )
      temp_value = 4;
    else if( !str_cmp( arg2, "spar_wins6" ) )
      temp_value = 5;
    else if( !str_cmp( arg2, "spar_wins7" ) )
      temp_value = 6;
    else
    {
      do_setclan( ch, "" );
      return;
    }
    clan->spar_wins[temp_value] = atoi( argument );
    send_to_char( "Ok.\n\r", ch );
    return;
  }

  if( !str_prefix( "spar_loss", arg2 ) )
  {
    int temp_value;
    if( !str_cmp( arg2, "spar_loss1" ) )
      temp_value = 0;
    else if( !str_cmp( arg2, "spar_loss2" ) )
      temp_value = 1;
    else if( !str_cmp( arg2, "spar_loss3" ) )
      temp_value = 2;
    else if( !str_cmp( arg2, "spar_loss4" ) )
      temp_value = 3;
    else if( !str_cmp( arg2, "spar_loss5" ) )
      temp_value = 4;
    else if( !str_cmp( arg2, "spar_loss6" ) )
      temp_value = 5;
    else if( !str_cmp( arg2, "spar_loss7" ) )
      temp_value = 6;
    else
    {
      do_setclan( ch, "" );
      return;
    }
    clan->spar_loss[temp_value] = atoi( argument );
    send_to_char( "Ok.\n\r", ch );
    return;
  }

  if( !str_prefix( "pdeath", arg2 ) )
  {
    int temp_value;
    if( !str_cmp( arg2, "pdeath1" ) )
      temp_value = 0;
    else if( !str_cmp( arg2, "pdeath2" ) )
      temp_value = 1;
    else if( !str_cmp( arg2, "pdeath3" ) )
      temp_value = 2;
    else if( !str_cmp( arg2, "pdeath4" ) )
      temp_value = 3;
    else if( !str_cmp( arg2, "pdeath5" ) )
      temp_value = 4;
    else if( !str_cmp( arg2, "pdeath6" ) )
      temp_value = 5;
    else if( !str_cmp( arg2, "pdeath7" ) )
      temp_value = 6;
    else
    {
      do_setclan( ch, "" );
      return;
    }
    clan->pdeaths[temp_value] = atoi( argument );
    send_to_char( "Ok.\n\r", ch );
    return;
  }
  do_setclan( ch, "" );
  return;

}

void do_setcouncil( CHAR_DATA * ch, char *argument )
{
  char arg1[MAX_INPUT_LENGTH];
  char arg2[MAX_INPUT_LENGTH];
  COUNCIL_DATA *council;

  set_char_color( AT_PLAIN, ch );

  if( IS_NPC( ch ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  argument = one_argument( argument, arg1 );
  argument = one_argument( argument, arg2 );
  if( arg1[0] == '\0' )
  {
    send_to_char( "Usage: setcouncil <council> <field> <deity|leader|number1|number2> <player>\n\r", ch );
    send_to_char( "\n\rField being one of:\n\r", ch );
    send_to_char( " head head2 members board meeting\n\r", ch );
    if( get_trust( ch ) >= LEVEL_GOD )
      send_to_char( " name filename desc\n\r", ch );
    if( get_trust( ch ) >= LEVEL_SUB_IMPLEM )
      send_to_char( " powers\n\r", ch );
    return;
  }

  council = get_council( arg1 );
  if( !council )
  {
    send_to_char( "No such council.\n\r", ch );
    return;
  }
  if( !str_cmp( arg2, "head" ) )
  {
    STRFREE( council->head );
    council->head = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    return;
  }

  if( !str_cmp( arg2, "head2" ) )
  {
    if( council->head2 != NULL )
      STRFREE( council->head2 );
    if( !str_cmp( argument, "none" ) || !str_cmp( argument, "clear" ) )
      council->head2 = NULL;
    else
      council->head2 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    return;
  }
  if( !str_cmp( arg2, "board" ) )
  {
    council->board = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    return;
  }
  if( !str_cmp( arg2, "members" ) )
  {
    council->members = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    return;
  }
  if( !str_cmp( arg2, "meeting" ) )
  {
    council->meeting = atoi( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    return;
  }
  if( get_trust( ch ) < LEVEL_GOD )
  {
    do_setcouncil( ch, "" );
    return;
  }
  if( !str_cmp( arg2, "name" ) )
  {
    STRFREE( council->name );
    council->name = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    return;
  }
  if( !str_cmp( arg2, "filename" ) )
  {
    if( council->filename && council->filename[0] != '\0' )
      DISPOSE( council->filename );
    council->filename = str_dup( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    write_council_list(  );
    return;
  }
  if( !str_cmp( arg2, "desc" ) )
  {
    STRFREE( council->description );
    council->description = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    return;
  }
  if( get_trust( ch ) < LEVEL_SUB_IMPLEM )
  {
    do_setcouncil( ch, "" );
    return;
  }
  if( !str_cmp( arg2, "powers" ) )
  {
    STRFREE( council->powers );
    council->powers = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_council( council );
    return;
  }

  do_setcouncil( ch, "" );
  return;
}

/*
 * Added multiple levels on pkills and pdeaths. -- Shaddai
 */

void do_showclan( CHAR_DATA * ch, char *argument )
{
  CLAN_DATA *clan;

  set_char_color( AT_PLAIN, ch );

  if( IS_NPC( ch ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }
  if( argument[0] == '\0' )
  {
    send_to_char( "Usage: showclan <clan>\n\r", ch );
    return;
  }

  clan = get_clan( argument );
  if( !clan )
  {
    send_to_char( "No such clan, guild or order.\n\r", ch );
    return;
  }

  ch_printf( ch, "\n\r&w%s    : &W%s\t\t&wShort Name: &W%s\t\t&wBadge: %s\n\r&wFilename : &W%s\n\r&wMotto    : &W%s\n\r",
             clan->clan_type == CLAN_ORDER ? "Order" :
             ( clan->clan_type == CLAN_GUILD ? "Guild" : "Clan " ),
             clan->name, clan->short_name, clan->badge ? clan->badge : "(not set)", clan->filename, clan->motto );
  ch_printf( ch, "&wDesc     : &W%s\n\r&wDeity    : &W%s\n\r", clan->description, clan->deity );
  ch_printf( ch, "&wOwner: &W%-15.15s\n\r", clan->owner );

  ch_printf( ch, "&wLeader1: &W%-15.15s  &wLeader2: &W%-15.15s  &wLeader3: &W%-15.15s",
             clan->leader1, clan->leader2, clan->leader3 );
  ch_printf( ch, "&wLeader4: &W%-15.15s  &wLeader5: &W%-15.15s  &wLeader6: &W%-15.15s",
             clan->leader4, clan->leader5, clan->leader6 );
  ch_printf( ch,
             "&wPKills   : &w  5k-10k :&W%-3d &w 10k-100k:&W%-3d &w100k-1m  :&W%-3d &w  1m-10m :&W%-3d\n         : &w 10m-100m:&W%-3d &w100m-1b  :&W%-3d &w    +1b  :&W%-3d\n\r",
             clan->pkills[0], clan->pkills[1], clan->pkills[2], clan->pkills[3], clan->pkills[4], clan->pkills[5],
             clan->pkills[6] );
  ch_printf( ch,
             "&wPDeaths  : &w  5k-10k :&W%-3d &w 10k-100k:&W%-3d &w100k-1m  :&W%-3d &w  1m-10m :&W%-3d\n         : &w 10m-100m:&W%-3d &w100m-1b  :&W%-3d &w    +1b  :&W%-3d\n\r",
             clan->pdeaths[0], clan->pdeaths[1], clan->pdeaths[2], clan->pdeaths[3], clan->pdeaths[4], clan->pdeaths[5],
             clan->pdeaths[6] );
  ch_printf( ch,
             "&wSpar_Wins: &w  5k-10k :&W%-3d &w 10k-100k:&W%-3d &w100k-1m  :&W%-3d &w  1m-10m :&W%-3d\n         : &w 10m-100m:&W%-3d &w100m-1b  :&W%-3d &w    +1b  :&W%-3d\n\r",
             clan->spar_wins[0], clan->spar_wins[1], clan->spar_wins[2], clan->spar_wins[3], clan->spar_wins[4],
             clan->spar_wins[5], clan->spar_wins[6] );
  ch_printf( ch,
             "&wSpar_Loss: &w  5k-10k :&W%-3d &w 10k-100k:&W%-3d &w100k-1m  :&W%-3d &w  1m-10m :&W%-3d\n         : &w 10m-100m:&W%-3d &w100m-1b  :&W%-3d &w    +1b  :&W%-3d\n\r",
             clan->spar_loss[0], clan->spar_loss[1], clan->spar_loss[2], clan->spar_loss[3], clan->spar_loss[4],
             clan->spar_loss[5], clan->spar_loss[6] );
  ch_printf( ch, "&wIllegalPK: &W%-6d\n\r", clan->illegal_pk );
  ch_printf( ch, "&wMKills   : &W%-6d   &wMDeaths: &W%-6d\n\r", clan->mkills, clan->mdeaths );
  ch_printf( ch, "&wScore    : &W%-6d   &wFavor  : &W%-6d   &wStrikes: &W%d\n\r", clan->score, clan->favour, clan->strikes );
  ch_printf( ch, "&wMembers  : &W%-6d  &wMemLimit: &W%-6d   &wActive: &W%-6d   &wAlign  : &W%-6d",
             clan->members, clan->mem_limit, clan->activeMem, clan->alignment );
  if( clan->clan_type == CLAN_GUILD )
    ch_printf( ch, "   &wClass  : &W%d &w(&W%s&w)",
               clan->class, clan->class < MAX_PC_CLASS ? class_table[clan->class]->who_name : "unknown" );
  send_to_char( "\n\r", ch );
  ch_printf( ch, "&wBoard    : &W%-5d    &wRecall : &W%-5d    &wStorage: &W%-5d\n\r",
             clan->board, clan->recall, clan->storeroom );
  ch_printf( ch, "&wDeathRecall:  &W%-5d    &wMorgue : &W%-5d    &wDonate: &W%-5d\n\r",
             clan->board, clan->recall, clan->storeroom );
  ch_printf( ch, "&wJail: &W%-5d  &wTax: &W%-5d", clan->clanJail, clan->tax );
  ch_printf( ch, "&wBank: &W%s", num_punct_ld( clan->bank ) );
  ch_printf( ch, "&wGuard1   : &W%-5d    &wGuard2 : &W%-5d\n\r", clan->guard1, clan->guard2 );
  ch_printf( ch, "&wObj1( &W%d &w)  Obj2( &W%d &w)  Obj3( &W%d &w)  Obj4( &W%d &w)  Obj5( &W%d &w)\n\r",
             clan->clanobj1, clan->clanobj2, clan->clanobj3, clan->clanobj4, clan->clanobj5 );
  ch_printf( ch, "&wSkill1( &W%d &w)  Skill2( &W%d &w)  Skill3( &W%d &w)\n\r",
             clan->clanSkill1, clan->clanSkill2, clan->clanSkill3 );
  /*
   * ch_printf(ch, "&wTotal Clan Power Level: &W%s", num_punct_ld(clan->clanPL));
   */
  ch_printf( ch, "        Male Rankings               Female Rankings\n\r" );
  ch_printf( ch, "  [ %-20.20s ]     [ %-20.20s ]\n\r", clan->mRank1, clan->fRank1 );
  ch_printf( ch, "  [ %-20.20s ]     [ %-20.20s ]\n\r", clan->mRank2, clan->fRank2 );
  ch_printf( ch, "  [ %-20.20s ]     [ %-20.20s ]\n\r", clan->mRank3, clan->fRank3 );
  ch_printf( ch, "  [ %-20.20s ]     [ %-20.20s ]\n\r", clan->mRank4, clan->fRank4 );
  ch_printf( ch, "  [ %-20.20s ]     [ %-20.20s ]\n\r", clan->mRank5, clan->fRank5 );
  ch_printf( ch, "  [ %-20.20s ]     [ %-20.20s ]\n\r", clan->mRank6, clan->fRank6 );
  ch_printf( ch, "  [ %-20.20s ]     [ %-20.20s ]\n\r", clan->mRank7, clan->fRank7 );

  ch_printf( ch, "show clan alliances here\n\r" );

  return;
}

void do_showcouncil( CHAR_DATA * ch, char *argument )
{
  COUNCIL_DATA *council;

  set_char_color( AT_PLAIN, ch );

  if( IS_NPC( ch ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }
  if( argument[0] == '\0' )
  {
    send_to_char( "Usage: showcouncil <council>\n\r", ch );
    return;
  }

  council = get_council( argument );
  if( !council )
  {
    send_to_char( "No such council.\n\r", ch );
    return;
  }

  ch_printf_color( ch, "\n\r&wCouncil :  &W%s\n\r&wFilename:  &W%s\n\r", council->name, council->filename );
  ch_printf_color( ch, "&wHead:      &W%s\n\r", council->head );
  ch_printf_color( ch, "&wHead2:     &W%s\n\r", council->head2 );
  ch_printf_color( ch, "&wMembers:   &W%-d\n\r", council->members );
  ch_printf_color( ch, "&wBoard:     &W%-5d\n\r&wMeeting:   &W%-5d\n\r&wPowers:    &W%s\n\r",
                   council->board, council->meeting, council->powers );
  ch_printf_color( ch, "&wDescription:\n\r&W%s\n\r", council->description );
  return;
}

void do_makeclan( CHAR_DATA * ch, char *argument )
{
  CLAN_DATA *clan;
  CLAN_DATA *aclan;
  ALLIANCE_DATA *alliance;

  set_char_color( AT_IMMORT, ch );

  if( !argument || argument[0] == '\0' )
  {
    send_to_char( "Usage: makeclan <clan name>\n\r", ch );
    return;
  }

  set_char_color( AT_PLAIN, ch );
  clan = get_clan( argument );
  if( clan )
  {
    send_to_char( "There is already a clan with that name.\n\r", ch );
    return;
  }

  CREATE( clan, CLAN_DATA, 1 );
  LINK( clan, first_clan, last_clan, next, prev );

  clan->name = STRALLOC( argument );
  clan->short_name = STRALLOC( "None" );

  /*
   * clan->filename = str_dup( "" );
   */
  clan->motto = STRALLOC( "" );
  clan->description = STRALLOC( "" );
  clan->bank = 0;
  clan->deity = STRALLOC( "None" );
  clan->owner = STRALLOC( "None" );
  clan->leader1 = STRALLOC( "None" );
  clan->leader2 = STRALLOC( "None" );
  clan->leader3 = STRALLOC( "None" );
  clan->leader4 = STRALLOC( "None" );
  clan->leader5 = STRALLOC( "None" );
  clan->leader6 = STRALLOC( "None" );
  clan->badge = STRALLOC( "" );
  clan->mRank1 = STRALLOC( "Leader" );
  clan->mRank2 = STRALLOC( "Rank2" );
  clan->mRank3 = STRALLOC( "Rank3" );
  clan->mRank4 = STRALLOC( "Rank4" );
  clan->mRank5 = STRALLOC( "Rank5" );
  clan->mRank6 = STRALLOC( "Rank6" );
  clan->mRank7 = STRALLOC( "Rank7" );
  clan->fRank1 = STRALLOC( "Leader" );
  clan->fRank2 = STRALLOC( "Rank2" );
  clan->fRank3 = STRALLOC( "Rank3" );
  clan->fRank4 = STRALLOC( "Rank4" );
  clan->fRank5 = STRALLOC( "Rank5" );
  clan->fRank6 = STRALLOC( "Rank6" );
  clan->fRank7 = STRALLOC( "Rank7" );
  clan->clanWebSite = STRALLOC( "" );

  for( aclan = first_clan; aclan; aclan = aclan->next )
  {
    if( aclan == clan )
      continue;

    CREATE( alliance, ALLIANCE_DATA, 1 );
    alliance->clan = clan;
    alliance->vclan = aclan;
    alliance->status = 0;
    alliance->vclanStatus = 0;
    alliance->votes = 0;
    alliance->leader1Vote = STRALLOC( "None" );
    alliance->leader2Vote = STRALLOC( "None" );
    LINK( alliance, first_alliance, last_alliance, next, prev );
  }
  newClanAlliance( clan );

  save_alliance(  );
  return;
}

void do_makecouncil( CHAR_DATA * ch, char *argument )
{
  char filename[256];
  COUNCIL_DATA *council;
  bool found;

  set_char_color( AT_IMMORT, ch );

  if( !argument || argument[0] == '\0' )
  {
    send_to_char( "Usage: makecouncil <council name>\n\r", ch );
    return;
  }

  found = FALSE;
  sprintf( filename, "%s%s", COUNCIL_DIR, strlower( argument ) );

  CREATE( council, COUNCIL_DATA, 1 );
  LINK( council, first_council, last_council, next, prev );
  council->name = STRALLOC( argument );
  council->head = STRALLOC( "" );
  council->head2 = NULL;
  council->powers = STRALLOC( "" );
}

void do_claninfo( CHAR_DATA * ch, char *argument )
{
  CLAN_DATA *clan;
  char buf[MAX_STRING_LENGTH];

  if( IS_NPC( ch ) )
    return;

  if( argument[0] == '\0' )
  {
    pager_printf( ch, "Syntax: claninfo (clan short name)\n\r" );
    return;
  }


  clan = get_clan( argument );

  if( !clan )
  {
    pager_printf( ch, "No such clan.\n\r" );
    return;
  }

  switch ( clan->alignment )
  {
    default:
      sprintf( buf, "&WNeutral" );
      break;
    case CLANALIGN_GOOD:
      sprintf( buf, "   &CGood" );
      break;
    case CLANALIGN_EVIL:
      sprintf( buf, "   &REvil" );
      break;
  }

  pager_printf( ch, "&cClan Name : &W[ &R%s &W]\n\r", clan->name );
  pager_printf( ch, "&cShort Name: &W[ &R%s &W]\n\r", clan->short_name );
  pager_printf( ch, "&g-----------------------------------------------------------------\n\r" );
  pager_printf( ch, "&cAdmin  : &W[ &R%-29s &W]  &cMembers : &W[ &R%7d &W]\n\r", clan->deity, clan->members );
  pager_printf( ch, "&cOwner  : &W[ &R%-29s &W]\n\r", clan->owner );
  pager_printf( ch, "&cLeaders: &W[ &R%-12s &W] [ &R%-12s &W]  &cTax Rate: &W[ &R%6d%% &W]\n\r", clan->leader1,
                clan->leader4, clan->tax );
  pager_printf( ch, "         &W[ &R%-12s &W] [ &R%-12s &W]  &cAlign   : &W[ %7s &W]\n\r", clan->leader2, clan->leader5,
                buf );
  /*
   * pager_printf(ch, "         &W[ &R%-12s &W] [ &R%-12s &W]  &cClan PL : &W[ &R%7s &W]\n\r", clan->leader3, clan->leader6, abbNumLD(clan->clanPL));
   */
  pager_printf( ch, "         &W[ &R%-12s &W] [ &R%-12s &W]\n\r", clan->leader3, clan->leader6 );
  pager_printf( ch, "&g-----------------------------------------------------------------\n\r" );
  pager_printf( ch, "&c          Male Rankings                       Female Rankings\n\r" );
  if( IS_IMMORTAL( ch ) || ch->pcdata->clan == clan )
  {
    pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W]       &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank1Count, clan->mRank1,
                  clan->fRank1Count, clan->fRank1 );
    pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W]       &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank2Count, clan->mRank2,
                  clan->fRank2Count, clan->fRank2 );
    pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W]       &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank3Count, clan->mRank3,
                  clan->fRank3Count, clan->fRank3 );
    pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W]       &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank4Count, clan->mRank4,
                  clan->fRank4Count, clan->fRank4 );
    pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W]       &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank5Count, clan->mRank5,
                  clan->fRank5Count, clan->fRank5 );
    pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W]       &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank6Count, clan->mRank6,
                  clan->fRank6Count, clan->fRank6 );
    pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W]       &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank7Count, clan->mRank7,
                  clan->fRank7Count, clan->fRank7 );
  }
  else
  {
    pager_printf( ch, "     &W[ &R%-20s &W]            [ &R%-20s &W]\n\r", clan->mRank1, clan->fRank1 );
    pager_printf( ch, "     &W[ &R%-20s &W]            [ &R%-20s &W]\n\r", clan->mRank2, clan->fRank2 );
    pager_printf( ch, "     &W[ &R%-20s &W]            [ &R%-20s &W]\n\r", clan->mRank3, clan->fRank3 );
    pager_printf( ch, "     &W[ &R%-20s &W]            [ &R%-20s &W]\n\r", clan->mRank4, clan->fRank4 );
    pager_printf( ch, "     &W[ &R%-20s &W]            [ &R%-20s &W]\n\r", clan->mRank5, clan->fRank5 );
    pager_printf( ch, "     &W[ &R%-20s &W]            [ &R%-20s &W]\n\r", clan->mRank6, clan->fRank6 );
    pager_printf( ch, "     &W[ &R%-20s &W]            [ &R%-20s &W]\n\r", clan->mRank7, clan->fRank7 );
  }
  pager_printf( ch, "&g-----------------------------------------------------------------\n\r" );
  pager_printf( ch, "&cClan Recall?       : &W[%s&W]     &cClan Donate Room? : &W[%s&W]\n\r", clan->recall ? "&RY" : "&rN",
                clan->clanDonate ? "&RY" : "&rN" );
  pager_printf( ch, "&cClan Death Recall? : &W[%s&W]     &cClan Jail?        : &W[%s&W]\n\r",
                clan->deathRecall ? "&RY" : "&rN", clan->clanJail ? "&RY" : "&rN" );
  pager_printf( ch, "&cClan Morgue?       : &W[%s&W]     &cClan Skill?       : &W[&rNone&W]\n\r",
                clan->clanMorgue ? "&RY" : "&rN" );
  if( IS_IMMORTAL( ch ) || ch->pcdata->clan == clan )
    pager_printf( ch, "&cClan Bank Account  : &W[ &R%s &W] &czeni\n\r", num_punct_ld( clan->bank ) );
  pager_printf( ch, "&g-----------------------------------------------------------------\n\r" );
  send_to_pager_color( "&wVictories (&zsorted by power level&w):&w\n\r", ch );
  send_to_pager_color( "&w      Player Kills           Sparing&w\n\r", ch );
  pager_printf_color( ch,
                      "    &w5k-10k...  &r[&R%4d&r]    &w5k-10k...  &r[&R%4d&r]\n\r    &w10k-100k...&r[&R%4d&r]    &w10k-100k...&r[&R%4d&r]\n\r    &w100k-1m... &r[&R%4d&r]    &w100k-1m... &r[&R%4d&r]\n\r    &w1m-10m...  &r[&R%4d&r]    &w1m-10m...  &r[&R%4d&r]\n\r",
                      clan->pkills[0], clan->spar_wins[0], clan->pkills[1], clan->spar_wins[1], clan->pkills[2],
                      clan->spar_wins[2], clan->pkills[3], clan->spar_wins[3] );
  pager_printf_color( ch,
                      "    &w10m-100m...&r[&R%4d&r]    &w10m-100m...&r[&R%4d&r]\n\r    &w100m-1b... &r[&R%4d&r]    &w100m-1b... &r[&R%4d&r]\n\r    &w+1b...     &r[&R%4d&r]    &w+1b...     &r[&R%4d&r]\n\r",
                      clan->pkills[4], clan->spar_wins[4], clan->pkills[5], clan->spar_wins[5], clan->pkills[6],
                      clan->spar_wins[6] );
  send_to_pager_color( "&w    --------------------------------------\n\r", ch );
  pager_printf_color( ch, "&C    &WTOTAL...   &r[&R%4d&r]&C    &WTOTAL...   &r[&R%4d&r]&w\n\r",
                      ( clan->pkills[0] + clan->pkills[1] + clan->pkills[2] + clan->pkills[3] + clan->pkills[4] +
                        clan->pkills[5] + clan->pkills[6] ),
                      ( clan->spar_wins[0] + clan->spar_wins[1] + clan->spar_wins[2] + clan->spar_wins[3] +
                        clan->spar_wins[4] + clan->spar_wins[5] + clan->spar_wins[6] ) );
  pager_printf( ch, "&g------------------------------------------------------------------------\n\r" );
  pager_printf( ch, "&cWeb Page    : &W[ &w%s &W]\n\r", clan->clanWebSite );
  pager_printf( ch, "&cMotto       : &W\"&w%s&W\"\n\r", clan->motto );
  pager_printf( ch, "&cDescription : \n\r &w%s\n\r", clan->description );
  pager_printf( ch, "&g------------------------------------------------------------------------&w\n\r" );
  show_alliances( ch, clan );
  return;
}

void do_clans( CHAR_DATA * ch, char *argument )
{
  CLAN_DATA *clan;
  int count = 0;

  pager_printf( ch, "\n\r&RClan name                                      Short    Members  Active\n\r", ch );
  /*
   * pager_printf(ch,"&r------------------------------------------- ----------- -------  ------ ------\n\r", ch );
   */
  pager_printf( ch, "&r------------------------------------------- ----------- -------  ------\n\r", ch );
  for( clan = first_clan; clan; clan = clan->next )
  {
    pager_printf( ch, "&c%-43s &w%-11s &g%7d  &c%6d\n\r",
                  clan->name, clan->short_name, clan->members, clan->activeMem /*, abbNumLD(clan->clanPL) */  );
    count++;
  }
  if( !count )
    send_to_pager_color( "&wThere are no Clans currently formed.\n\r", ch );
  else
  {
    send_to_pager_color( "&r------------------------------------------------------------------------------&c\n\r", ch );
    pager_printf( ch, "For more information on each clan, use : 'Claninfo (short name)'\n\r" );
    pager_printf( ch, "Default inactive days is 30. Use 'Clans <days>' change. [NOT FUNCTIONAL]\n\r" );
    pager_printf( ch, "For clan membership listings, see 'Help Roster' [NOT FUNCTIONAL]\n\r" );
  }

  return;

/*
    clan = get_clan( argument );
    if ( !clan || clan->clan_type == CLAN_GUILD || clan->clan_type == CLAN_ORDER )
    {
        set_char_color( AT_BLOOD, ch );
        send_to_pager_color( "No such clan.\n\r", ch );
        return;
    }
    pager_printf_color( ch, "&r\n\r%s, '&R%s&r'\n\r\n\r", clan->name, clan->motto );
    send_to_pager_color ( "&wVictories (&zsorted by power level&w):&w\n\r", ch );
    send_to_pager_color ( "&w      Player Kills           Sparing&w\n\r", ch );

	pager_printf_color( ch, "    &w5k-10k...  &r[&R%4d&r]    &w5k-10k...  &r[&R%4d&r]\n\r    &w10k-100k...&r[&R%4d&r]    &w10k-100k...&r[&R%4d&r]\n\r    &w100k-1m... &r[&R%4d&r]    &w100k-1m... &r[&R%4d&r]\n\r    &w1m-10m...  &r[&R%4d&r]    &w1m-10m...  &r[&R%4d&r]\n\r",
	clan->pkills[0], clan->spar_wins[0],
	clan->pkills[1], clan->spar_wins[1],
	clan->pkills[2], clan->spar_wins[2],
	clan->pkills[3], clan->spar_wins[3] );
    pager_printf_color( ch, "    &w10m-100m...&r[&R%4d&r]    &w10m-100m...&r[&R%4d&r]\n\r    &w100m-1b... &r[&R%4d&r]    &w100m-1b... &r[&R%4d&r]\n\r    &w+1b...     &r[&R%4d&r]    &w+1b...     &r[&R%4d&r]\n\r",
	clan->pkills[4], clan->spar_wins[4],
	clan->pkills[5], clan->spar_wins[5],
	clan->pkills[6], clan->spar_wins[6] );
	send_to_pager_color("&w    --------------------------------------\n\r", ch);
    pager_printf_color( ch, "&C    &WTOTAL...   &r[&R%4d&r]&C    &WTOTAL...   &r[&R%4d&r]\n\r",
	(clan->pkills[0]+clan->pkills[1]+clan->pkills[2]+clan->pkills[3]+clan->pkills[4]+clan->pkills[5]+clan->pkills[6]),
	(clan->spar_wins[0]+clan->spar_wins[1]+clan->spar_wins[2]+clan->spar_wins[3]+clan->spar_wins[4]+clan->spar_wins[5]+clan->spar_wins[6]) );



    pager_printf_color( ch, "&wClan Leader:  &W%s\n\r&wNumber One :  &W%s\n\r&wNumber Two :  &W%s\n\r&wClan Admin :  &W%s\n\r",
                        clan->leader1,
                        clan->leader2,
                        clan->leader3,
			clan->deity );
    if ( !str_cmp( ch->name, clan->deity   )
    ||   !str_cmp( ch->name, clan->leader1  )
    ||   !str_cmp( ch->name, clan->leader2 )
    ||   !str_cmp( ch->name, clan->leader3 ) )
	pager_printf_color( ch, "&wMembers    :  &W%d\n\r",
			clan->members );
    set_char_color( AT_BLOOD, ch );
    pager_printf_color( ch, "\n\rDescription:&R  %s&D\n\r", clan->description );
    return;
*/
}

void do_orders( CHAR_DATA * ch, char *argument )
{
  CLAN_DATA *order;
  int count = 0;

  if( argument[0] == '\0' )
  {
    set_char_color( AT_DGREEN, ch );
    send_to_char
      ( "\n\rOrder            Deity          Leader           Mkills      Mdeaths\n\r____________________________________________________________________\n\r\n\r",
        ch );
    set_char_color( AT_GREEN, ch );
    for( order = first_clan; order; order = order->next )
      if( order->clan_type == CLAN_ORDER )
      {
        ch_printf( ch, "%-16s %-14s %-14s   %-7d       %5d\n\r",
                   order->name, order->deity, order->leader1, order->mkills, order->mdeaths );
        count++;
      }
    set_char_color( AT_DGREEN, ch );
    if( !count )
      send_to_char( "There are no Orders currently formed.\n\r", ch );
    else
      send_to_char
        ( "____________________________________________________________________\n\r\n\rUse 'orders <order>' for more detailed information.\n\r",
          ch );
    return;
  }

  order = get_clan( argument );
  if( !order || order->clan_type != CLAN_ORDER )
  {
    set_char_color( AT_DGREEN, ch );
    send_to_char( "No such Order.\n\r", ch );
    return;
  }

  set_char_color( AT_DGREEN, ch );
  ch_printf( ch, "\n\rOrder of %s\n\r'%s'\n\r\n\r", order->name, order->motto );
  set_char_color( AT_GREEN, ch );
  ch_printf( ch, "Deity      :  %s\n\rLeader     :  %s\n\rNumber One :  %s\n\rNumber Two :  %s\n\r",
             order->deity, order->leader1, order->leader2, order->leader3 );
  if( !str_cmp( ch->name, order->deity )
      || !str_cmp( ch->name, order->leader1 )
      || !str_cmp( ch->name, order->leader2 ) || !str_cmp( ch->name, order->leader3 ) )
    ch_printf( ch, "Members    :  %d\n\r", order->members );
  set_char_color( AT_DGREEN, ch );
  ch_printf( ch, "\n\rDescription:\n\r%s\n\r", order->description );
  return;
}

void do_councils( CHAR_DATA * ch, char *argument )
{
  COUNCIL_DATA *council;

  set_char_color( AT_CYAN, ch );
  if( !first_council )
  {
    send_to_char( "There are no councils currently formed.\n\r", ch );
    return;
  }
  if( argument[0] == '\0' )
  {
    send_to_char_color( "\n\r&cTitle                    Head\n\r", ch );
    for( council = first_council; council; council = council->next )
    {
      if( council->head2 != NULL )
        ch_printf_color( ch, "&w%-24s %s and %s\n\r", council->name, council->head, council->head2 );
      else
        ch_printf_color( ch, "&w%-24s %-14s\n\r", council->name, council->head );
    }
    send_to_char_color( "&cUse 'councils <name of council>' for more detailed information.\n\r", ch );
    return;
  }
  council = get_council( argument );
  if( !council )
  {
    send_to_char_color( "&cNo such council exists...\n\r", ch );
    return;
  }
  ch_printf_color( ch, "&c\n\r%s\n\r", council->name );
  if( council->head2 == NULL )
    ch_printf_color( ch, "&cHead:     &w%s\n\r&cMembers:  &w%d\n\r", council->head, council->members );
  else
    ch_printf_color( ch, "&cCo-Heads:     &w%s &cand &w%s\n\r&cMembers:  &w%d\n\r",
                     council->head, council->head2, council->members );
  ch_printf_color( ch, "&cDescription:\n\r&w%s\n\r", council->description );
  return;
}

void do_guilds( CHAR_DATA * ch, char *argument )
{
  char buf[MAX_STRING_LENGTH];
  CLAN_DATA *guild;
  int count = 0;

  if( argument[0] == '\0' )
  {
    set_char_color( AT_HUNGRY, ch );
    send_to_char
      ( "\n\rGuild                  Leader             Mkills      Mdeaths\n\r_____________________________________________________________\n\r\n\r",
        ch );
    set_char_color( AT_YELLOW, ch );
    for( guild = first_clan; guild; guild = guild->next )
      if( guild->clan_type == CLAN_GUILD )
      {
        ++count;
        ch_printf( ch, "%-20s   %-14s     %-6d       %6d\n\r", guild->name, guild->leader1, guild->mkills, guild->mdeaths );
      }
    set_char_color( AT_HUNGRY, ch );
    if( !count )
      send_to_char( "There are no Guilds currently formed.\n\r", ch );
    else
      send_to_char
        ( "_____________________________________________________________\n\r\n\rUse guilds <class>' for specifics. (ex:  guilds thieves)\n\r",
          ch );
    return;
  }

  sprintf( buf, "guild of %s", argument );
  guild = get_clan( buf );
  if( !guild || guild->clan_type != CLAN_GUILD )
  {
    set_char_color( AT_HUNGRY, ch );
    send_to_char( "No such Guild.\n\r", ch );
    return;
  }
  set_char_color( AT_HUNGRY, ch );
  ch_printf( ch, "\n\r%s\n\r", guild->name );
  set_char_color( AT_YELLOW, ch );
  ch_printf( ch, "Leader:    %s\n\rNumber 1:  %s\n\rNumber 2:  %s\n\rMotto:     %s\n\r",
             guild->leader1, guild->leader2, guild->leader3, guild->motto );
  if( !str_cmp( ch->name, guild->deity )
      || !str_cmp( ch->name, guild->leader1 )
      || !str_cmp( ch->name, guild->leader2 ) || !str_cmp( ch->name, guild->leader3 ) )
    ch_printf( ch, "Members:   %d\n\r", guild->members );
  set_char_color( AT_HUNGRY, ch );
  ch_printf( ch, "Guild Description:\n\r%s\n\r", guild->description );
  return;
}

void do_victories( CHAR_DATA * ch, char *argument )
{
  char filename[256];

  if( IS_NPC( ch ) || !ch->pcdata->clan )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }
  if( ch->pcdata->clan->clan_type != CLAN_ORDER && ch->pcdata->clan->clan_type != CLAN_GUILD )
  {
    sprintf( filename, "%s%s.record", CLAN_DIR, ch->pcdata->clan->short_name );
    set_pager_color( AT_PURPLE, ch );
    if( !str_cmp( ch->name, ch->pcdata->clan->leader1 ) && !str_cmp( argument, "clean" ) )
    {
      FILE *fp = fopen( filename, "w" );
      if( fp )
        fclose( fp );
      send_to_pager( "\n\rVictories ledger has been cleared.\n\r", ch );
      return;
    }
    else
    {
      send_to_pager( "\n\rLVL  Character       LVL  Character\n\r", ch );
      show_file( ch, filename );
      return;
    }
  }
  else
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }
}


void do_shove( CHAR_DATA * ch, char *argument )
{
  char arg[MAX_INPUT_LENGTH];
  char arg2[MAX_INPUT_LENGTH];
  int exit_dir;
  EXIT_DATA *pexit;
  CHAR_DATA *victim;
  bool nogo;
  ROOM_INDEX_DATA *to_room;
  int chance = 0;

  argument = one_argument( argument, arg );
  argument = one_argument( argument, arg2 );

  if( IS_NPC( ch ) || !IS_SET( ch->pcdata->flags, PCFLAG_DEADLY ) )
  {
    send_to_char( "Only deadly characters can shove.\n\r", ch );
    return;
  }

  if( get_timer( ch, TIMER_PKILLED ) > 0 )
  {
    send_to_char( "You can't shove a player right now.\n\r", ch );
    return;
  }

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

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

  if( victim == ch )
  {
    send_to_char( "You shove yourself around, to no avail.\n\r", ch );
    return;
  }
  if( IS_NPC( victim ) || !IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) )
  {
    send_to_char( "You can only shove deadly characters.\n\r", ch );
    return;
  }

  if( ch->level - victim->level > 5 || victim->level - ch->level > 5 )
  {
    send_to_char( "There is too great an experience difference for you to even bother.\n\r", ch );
    return;
  }

  if( get_timer( victim, TIMER_PKILLED ) > 0 )
  {
    send_to_char( "You can't shove that player right now.\n\r", ch );
    return;
  }

  if( ( victim->position ) != POS_STANDING )
  {
    act( AT_PLAIN, "$N isn't standing up.", ch, NULL, victim, TO_CHAR );
    return;
  }

  if( arg2[0] == '\0' )
  {
    send_to_char( "Shove them in which direction?\n\r", ch );
    return;
  }

  exit_dir = get_dir( arg2 );
  if( xIS_SET( victim->in_room->room_flags, ROOM_SAFE ) )
  {
    send_to_char( "That character cannot be shoved right now.\n\r", ch );
    return;
  }
  victim->position = POS_SHOVE;
  nogo = FALSE;
  if( ( pexit = get_exit( ch->in_room, exit_dir ) ) == NULL )
    nogo = TRUE;
  else
    if( IS_SET( pexit->exit_info, EX_CLOSED )
        && ( !IS_AFFECTED( victim, AFF_PASS_DOOR ) || IS_SET( pexit->exit_info, EX_NOPASSDOOR ) ) )
    nogo = TRUE;
  if( nogo )
  {
    send_to_char( "There's no exit in that direction.\n\r", ch );
    victim->position = POS_STANDING;
    return;
  }
  to_room = pexit->to_room;
  if( xIS_SET( to_room->room_flags, ROOM_DEATH ) )
  {
    send_to_char( "You cannot shove someone into a death trap.\n\r", ch );
    victim->position = POS_STANDING;
    return;
  }

  if( ch->in_room->area != to_room->area && !in_hard_range( victim, to_room->area ) )
  {
    send_to_char( "That character cannot enter that area.\n\r", ch );
    victim->position = POS_STANDING;
    return;
  }

/* Check for class, assign percentage based on that. */

/* Add 3 points to chance for every str point above 15, subtract for
below 15 */

  chance += ( get_curr_str( ch ) - 10 );

  chance += ( get_attmod( ch, victim ) );


/* Debugging purposes - show percentage for testing */

/* sprintf(buf, "Shove percentage of %s = %d", ch->name, chance);
act( AT_ACTION, buf, ch, NULL, NULL, TO_ROOM );
*/

  if( chance < number_percent(  ) )
  {
    send_to_char( "You failed.\n\r", ch );
    victim->position = POS_STANDING;
    return;
  }
  act( AT_ACTION, "You shove $M.", ch, NULL, victim, TO_CHAR );
  act( AT_ACTION, "$n shoves you.", ch, NULL, victim, TO_VICT );
  move_char( victim, get_exit( ch->in_room, exit_dir ), 0 );
  if( !char_died( victim ) )
    victim->position = POS_STANDING;
  WAIT_STATE( ch, 12 );
  /*
   * Remove protection from shove/drag if char shoves -- Blodkai 
   */
  if( xIS_SET( ch->in_room->room_flags, ROOM_SAFE ) && get_timer( ch, TIMER_SHOVEDRAG ) <= 0 )
    add_timer( ch, TIMER_SHOVEDRAG, 10, NULL, 0 );
}

void do_drag( CHAR_DATA * ch, char *argument )
{
  char arg[MAX_INPUT_LENGTH];
  char arg2[MAX_INPUT_LENGTH];
  int exit_dir;
  CHAR_DATA *victim;
  EXIT_DATA *pexit;
  ROOM_INDEX_DATA *to_room;
  bool nogo;
  int chance = 0;

  argument = one_argument( argument, arg );
  argument = one_argument( argument, arg2 );

  if( IS_NPC( ch ) )
    /*
     * || !IS_SET( ch->pcdata->flags, PCFLAG_DEADLY ) )  
     */
  {
    send_to_char( "Only characters can drag.\n\r", ch );
    return;
  }

  if( get_timer( ch, TIMER_PKILLED ) > 0 )
  {
    send_to_char( "You can't drag a player right now.\n\r", ch );
    return;
  }

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

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

  if( victim == ch )
  {
    send_to_char( "You take yourself by the scruff of your neck, but go nowhere.\n\r", ch );
    return;
  }

  if( IS_NPC( victim ) )
    /*
     * || !IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) ) 
     */
  {
    send_to_char( "You can only drag characters.\n\r", ch );
    return;
  }

  if( !xIS_SET( victim->act, PLR_SHOVEDRAG ) && !IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) )
  {
    send_to_char( "That character doesn't seem to appreciate your attentions.\n\r", ch );
    return;
  }

  if( get_timer( victim, TIMER_PKILLED ) > 0 )
  {
    send_to_char( "You can't drag that player right now.\n\r", ch );
    return;
  }

  if( victim->fighting )
  {
    send_to_char( "You try, but can't get close enough.\n\r", ch );
    return;
  }

  if( !IS_SET( ch->pcdata->flags, PCFLAG_DEADLY ) && IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) )
  {
    send_to_char( "You cannot drag a deadly character.\n\r", ch );
    return;
  }

  if( !IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) && victim->position > 3 )
  {
    send_to_char( "They don't seem to need your assistance.\n\r", ch );
    return;
  }

  if( arg2[0] == '\0' )
  {
    send_to_char( "Drag them in which direction?\n\r", ch );
    return;
  }

  exit_dir = get_dir( arg2 );

  if( xIS_SET( victim->in_room->room_flags, ROOM_SAFE ) )
  {
    send_to_char( "That character cannot be dragged right now.\n\r", ch );
    return;
  }

  nogo = FALSE;
  if( ( pexit = get_exit( ch->in_room, exit_dir ) ) == NULL )
    nogo = TRUE;
  else
    if( IS_SET( pexit->exit_info, EX_CLOSED )
        && ( !IS_AFFECTED( victim, AFF_PASS_DOOR ) || IS_SET( pexit->exit_info, EX_NOPASSDOOR ) ) )
    nogo = TRUE;
  if( nogo )
  {
    send_to_char( "There's no exit in that direction.\n\r", ch );
    return;
  }

  to_room = pexit->to_room;
  if( xIS_SET( to_room->room_flags, ROOM_DEATH ) )
  {
    send_to_char( "You cannot drag someone into a death trap.\n\r", ch );
    return;
  }

  if( ch->in_room->area != to_room->area && !in_hard_range( victim, to_room->area ) )
  {
    send_to_char( "That character cannot enter that area.\n\r", ch );
    victim->position = POS_STANDING;
    return;
  }

/* Check for class, assign percentage based on that. */

/* Add 3 points to chance for every str point above 15, subtract for
below 15 */

  chance += ( get_curr_str( ch ) - 10 );

  chance += ( get_attmod( ch, victim ) );

/*
sprintf(buf, "Drag percentage of %s = %d", ch->name, chance);
act( AT_ACTION, buf, ch, NULL, NULL, TO_ROOM );
*/
  if( chance < number_percent(  ) )
  {
    send_to_char( "You failed.\n\r", ch );
    victim->position = POS_STANDING;
    return;
  }
  if( victim->position < POS_STANDING )
  {
    sh_int temp;

    temp = victim->position;
    victim->position = POS_DRAG;
    act( AT_ACTION, "You drag $M into the next room.", ch, NULL, victim, TO_CHAR );
    act( AT_ACTION, "$n grabs your hair and drags you.", ch, NULL, victim, TO_VICT );
    move_char( victim, get_exit( ch->in_room, exit_dir ), 0 );
    if( !char_died( victim ) )
      victim->position = temp;
/* Move ch to the room too.. they are doing dragging - Scryn */
    move_char( ch, get_exit( ch->in_room, exit_dir ), 0 );
    WAIT_STATE( ch, 12 );
    return;
  }
  send_to_char( "You cannot do that to someone who is standing.\n\r", ch );
  return;
}

void do_promote( CHAR_DATA * ch, char *argument )
{
/*
	CHAR_DATA *victim;
	CLAN_DATA *clan;
    char arg[MAX_INPUT_LENGTH];

    if ( IS_NPC( ch ) || !ch->pcdata->clan )
    {
	send_to_char( "Huh?\n\r", ch );
	return;
    }

    clan = ch->pcdata->clan;

    if (!str_cmp( ch->name, clan->deity )
    ||   !str_cmp( ch->name, clan->leader ))
	;
    else
    {
	send_to_char( "Huh?\n\r", ch );
	return;
    }

	argument = one_argument( argument, arg );

    if ( arg[0] == '\0' )
    {
	send_to_char( "Syntax: promote <name> <leader/number1/number2>\n\r", ch );
	return;
    }

    if ( ( victim = get_char_room( ch, arg ) ) == NULL )
    {
	send_to_char( "That player is not here.\n\r", ch);
	return;
    }

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

	if (!victim->pcdata->clan)
    {
	send_to_char( "They must already be in your clan.\n\r", ch );
	return;
    }

	clan = ch->pcdata->clan;

	if (victim->pcdata->clan != clan)
    {
	send_to_char( "They must already be in your clan.\n\r", ch );
	return;
    }

	if (!str_cmp( argument, "leader" ))
	{
		STRFREE( clan->leader );
		clan->leader = STRALLOC( victim->name );
		pager_printf_color( ch, "&w%s has been promoted to leader.\n\r", victim->name );
		pager_printf_color( victim, "&wYou have been promoted to leader.\n\r", victim->name );
		return;
    }
	if (!str_cmp( argument, "number1" ))
	{
		STRFREE( clan->number1 );
		clan->number1 = STRALLOC( victim->name );
		pager_printf_color( ch, "&w%s has been promoted to first officer.\n\r", victim->name );
		pager_printf_color( victim, "&wYou have been promoted to first officer.\n\r", victim->name );
		return;
    }
	if (!str_cmp( argument, "number2" ))
	{
		STRFREE( clan->number2 );
		clan->number2 = STRALLOC( victim->name );
		pager_printf_color( ch, "&w%s has been promoted to second officer.\n\r", victim->name );
		pager_printf_color( victim, "&wYou have been promoted to second officer.\n\r", victim->name );
		return;
    }

	send_to_char( "You that isn't a rank.\n\r", ch );
*/
  return;
}

void show_members( CHAR_DATA * ch, char *argument, char *format )
{
  MEMBER_LIST *members_list;
  MEMBER_DATA *member;
  CLAN_DATA *clan;


  for( members_list = first_member_list; members_list; members_list = members_list->next )
  {
    if( !str_cmp( members_list->name, argument ) )
      break;
  }

  if( !members_list )
    return;

  clan = get_clan( argument );

  if( !clan )
    return;

  pager_printf( ch, "\n\r&cMembers of &W%s\n\r", clan->name );
  pager_printf( ch, "&z------------------------------------------------------------&c\n\r" );
  pager_printf( ch, "Admin: &w%s\n\r", clan->deity );
  pager_printf( ch, "Leaders:&w\n\r" );
  pager_printf( ch, " %-12s  %-12s\n\r", clan->leader1, clan->leader2 );
  pager_printf( ch, " %-12s  %-12s\n\r", clan->leader3, clan->leader4 );
  pager_printf( ch, " %-12s  %-12s\n\r", clan->leader5, clan->leader6 );
  pager_printf( ch, "&z------------------------------------------------------------&c\n\r" );
  pager_printf( ch, "&cName                 Race   Kills   Deaths Since\n\r\n\r" );

  if( format )
  {
    if( !str_cmp( format, "kills" ) || !str_cmp( format, "deaths" ) || !str_cmp( format, "alpha" ) )
    {
      MS_DATA *insert = NULL;
      MS_DATA *sort;
      MS_DATA *first_member = NULL;
      MS_DATA *last_member = NULL;

      CREATE( sort, MS_DATA, 1 );
      sort->member = members_list->first_member;
      LINK( sort, first_member, last_member, next, prev );

      for( member = members_list->first_member->next; member; member = member->next )
      {
        insert = NULL;
        for( sort = first_member; sort; sort = sort->next )
        {
          if( !str_cmp( format, "kills" ) )
          {
            if( member->kills > sort->member->kills )
            {
              CREATE( insert, MS_DATA, 1 );
              insert->member = member;
              INSERT( insert, sort, first_member, next, prev );
              break;
            }
          }
          else if( !str_cmp( format, "deaths" ) )
          {
            if( member->deaths > sort->member->deaths )
            {
              CREATE( insert, MS_DATA, 1 );
              insert->member = member;
              INSERT( insert, sort, first_member, next, prev );
              break;
            }
          }
          else if( !str_cmp( format, "alpha" ) )
          {
            if( strcmp( member->name, sort->member->name ) < 0 )
            {
              CREATE( insert, MS_DATA, 1 );
              insert->member = member;
              INSERT( insert, sort, first_member, next, prev );
              break;
            }
          }

        }
        if( insert == NULL )
        {
          CREATE( insert, MS_DATA, 1 );
          insert->member = member;
          LINK( insert, first_member, last_member, next, prev );
        }
      }

      for( sort = first_member; sort; sort = sort->next )
        if( !is_leader( ch ) )
          pager_printf( ch, "&w%-12s %13s %6d %8d %10s\n\r",
                        capitalize( sort->member->name ),
                        class_table[sort->member->race]->who_name,
                        sort->member->kills, sort->member->deaths, sort->member->since );

    }

    for( member = members_list->first_member; member; member = member->next )
      if( !str_prefix( format, member->name ) )
        pager_printf( ch, "&w%-12s %13s %6d %8d %10s\n\r",
                      capitalize( member->name ),
                      class_table[member->race]->who_name, member->kills, member->deaths, member->since );

  }
  else
  {

    for( member = members_list->first_member; member; member = member->next )
      if( !is_leader( ch ) )
        pager_printf( ch, "&w%-12s %13s %6d  %7d %10s\n\r",
                      capitalize( member->name ), class_table[member->race]->who_name,
                      member->kills, member->deaths, member->since );
  }

  pager_printf( ch, "&z------------------------------------------------------------&c\n\r" );


}

void remove_member( CHAR_DATA * ch )
{
  MEMBER_LIST *members_list;
  MEMBER_DATA *member;

  if( !ch->pcdata )
    return;

  for( members_list = first_member_list; members_list; members_list = members_list->next )
  {
    if( !str_cmp( members_list->name, ch->pcdata->clan_name ) )
      break;
  }

  if( !members_list )
  {
    /*
     * bug("Remove_member: No members list",0);
     */
    return;
  }

  for( member = members_list->first_member; member; member = member->next )
  {
    if( !str_cmp( member->name, ch->name ) )
    {
      UNLINK( member, members_list->first_member, members_list->last_member, next, prev );
      STRFREE( member->name );
      STRFREE( member->since );
      DISPOSE( member );
      save_member_list( members_list );
/*
			if (ch->pcdata)
			{
			ch->pcdata->clan->members--;
			save_clan( ch->pcdata->clan );
			}
*/
      break;
    }
  }
}

void do_roster( CHAR_DATA * ch, char *argument )
{
  if( IS_NPC( ch ) || !ch->pcdata->clan || ( !is_leader( ch ) /*|| !is_deity(ch) */  ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  show_members( ch, ch->pcdata->clan->name, argument );
  return;

}
void do_members( CHAR_DATA * ch, char *argument )
{

  char arg1[MAX_STRING_LENGTH];
  argument = one_argument( argument, arg1 );

  if( argument[0] == '\0' || arg1[0] == '\0' )
  {
    send_to_char( "Do what?\n\r", ch );
    return;
  }

  if( !str_cmp( arg1, "show" ) )
  {
    if( !str_cmp( argument, "all" ) )
    {
      MEMBER_LIST *members_list;
      for( members_list = first_member_list; members_list; members_list = members_list->next )
        show_members( ch, members_list->name, NULL );
      return;
    }

    show_members( ch, argument, NULL );
    return;
  }

  if( !str_cmp( arg1, "create" ) )
  {
    MEMBER_LIST *members_list;

    CREATE( members_list, MEMBER_LIST, 1 );
    members_list->name = STRALLOC( argument );
    LINK( members_list, first_member_list, last_member_list, next, prev );
    save_member_list( members_list );
    ch_printf( ch, "Member lists \"%s\" created.\n\r", argument );
    return;
  }

  if( !str_cmp( arg1, "delete" ) )
  {
    MEMBER_LIST *members_list;
    MEMBER_DATA *member;

    for( members_list = first_member_list; members_list; members_list = members_list->next )
      if( !str_cmp( argument, members_list->name ) )
      {
        while( members_list->first_member )
        {
          member = members_list->first_member;
          STRFREE( member->name );
          STRFREE( member->since );
          UNLINK( member, members_list->first_member, members_list->last_member, next, prev );
          DISPOSE( member );
        }

        STRFREE( members_list->name );
        UNLINK( members_list, first_member_list, last_member_list, next, prev );
        DISPOSE( members_list );
        ch_printf( ch, "Member list \"%s\" destroyed.\n\r", argument );
        return;
      }
    send_to_char( "No such list.\n\r", ch );
    return;
  }
}

void save_member_list( MEMBER_LIST * members_list )
{
  MEMBER_DATA *member;
  FILE *fp;
  CLAN_DATA *clan;
  char buf[MAX_STRING_LENGTH];

  if( !members_list )
  {
    bug( "save_member_list: NULL members_list" );
    return;
  }

  if( ( clan = get_clan( members_list->name ) ) == NULL )
  {
    bug( "save_member_list: no such clan: %s", members_list->name );
    return;
  }

  sprintf( buf, "%s%s.mem", CLAN_DIR, clan->filename );

  if( ( fp = fopen( buf, "w" ) ) == NULL )
  {
    bug( "Cannot open clan.mem file for writing", 0 );
    perror( buf );
    return;
  }

  fprintf( fp, "Name          %s~\n", members_list->name );
  for( member = members_list->first_member; member; member = member->next )
    fprintf( fp, "Member        %s %s %d %d %d %d\n", member->name, member->since,
             member->kills, member->deaths, member->level, member->race );
  fprintf( fp, "End\n\n" );
  fclose( fp );

}

bool load_member_list( char *filename )
{
  FILE *fp;
  char buf[MAX_STRING_LENGTH];
  MEMBER_LIST *members_list;
  MEMBER_DATA *member;

  sprintf( buf, "%s%s.mem", CLAN_DIR, filename );

  if( ( fp = fopen( buf, "r" ) ) == NULL )
  {
    bug( "Cannot open member list for reading", 0 );
    return FALSE;
  }

  CREATE( members_list, MEMBER_LIST, 1 );

  for( ;; )
  {
    char *word;

    word = fread_word( fp );

    if( !str_cmp( word, "Name" ) )
    {
      members_list->name = fread_string( fp );
      continue;
    }
    else if( !str_cmp( word, "Member" ) )
    {
      CREATE( member, MEMBER_DATA, 1 );
      member->name = STRALLOC( fread_word( fp ) );
      member->since = STRALLOC( fread_word( fp ) );
      member->kills = fread_number( fp );
      member->deaths = fread_number( fp );
      member->level = fread_number( fp );
      member->race = fread_number( fp );
      LINK( member, members_list->first_member, members_list->last_member, next, prev );
      continue;
    }
    else if( !str_cmp( word, "End" ) )
    {
      LINK( members_list, first_member_list, last_member_list, next, prev );
      fclose( fp );
      return TRUE;
    }
    else
    {
      bug( "load_members_list: bad section", 0 );
      fclose( fp );
      return FALSE;
    }
  }

}

void update_member( CHAR_DATA * ch )
{
  MEMBER_LIST *members_list;
  MEMBER_DATA *member;

  if( IS_NPC( ch ) || !ch->pcdata->clan )
    return;

  for( members_list = first_member_list; members_list; members_list = members_list->next )
    if( !str_cmp( members_list->name, ch->pcdata->clan_name ) )
    {
      for( member = members_list->first_member; member; member = member->next )
        if( !str_cmp( member->name, ch->name ) )
        {
          if( ch->pcdata->clan->clan_type == CLAN_PLAIN )
          {
            member->kills = ch->pcdata->pkills;
            member->deaths = ch->pcdata->pdeaths;
          }
          else
          {
            member->kills = ch->pcdata->mkills;
            member->deaths = ch->pcdata->mdeaths;
          }

          member->level = ch->level;
          return;
        }

      if( member == NULL )
      {
        struct tm *t = localtime( &current_time );
        char buf[MAX_STRING_LENGTH];

        CREATE( member, MEMBER_DATA, 1 );
        member->name = STRALLOC( ch->name );
        member->level = ch->level;
        member->race = ch->race;
        sprintf( buf, "[%02d|%02d|%04d]", t->tm_mon + 1, t->tm_mday, t->tm_year + 1900 );
        member->since = STRALLOC( buf );
        if( ch->pcdata->clan->clan_type == CLAN_PLAIN )
        {
          member->kills = ch->pcdata->pkills;
          member->deaths = ch->pcdata->pdeaths;
        }
        else
        {
          member->kills = ch->pcdata->mkills;
          member->deaths = ch->pcdata->mdeaths;
        }
        LINK( member, members_list->first_member, members_list->last_member, next, prev );
        save_member_list( members_list );
        ch->pcdata->clan->members++;
        save_clan( ch->pcdata->clan );


      }

    }
}

void do_clandeposit( CHAR_DATA * ch, char *argument )
{
  char buf[MAX_STRING_LENGTH];
  int amount = 0;

  if( IS_NPC( ch ) )
  {
    send_to_char( "NPC's can't deposit zeni.\n\r", ch );
    return;
  }

  if( !ch->pcdata->clan )
  {
    send_to_char( "You're not in a clan.\n\r", ch );
    return;
  }

  if( argument[0] == '\0' )
  {
    send_to_char( "Deposit how much?\n\r", ch );
    return;
  }

  if( !is_number( argument ) )
  {
    send_to_char( "You must donate zeni.\n\r", ch );
    return;
  }

  amount = atoi( argument );

  if( amount <= 0 )
  {
    send_to_char( "You must donate zeni.\n\r", ch );
    return;
  }

  if( amount > ch->gold )
  {
    send_to_char( "That's more than you have!\n\r", ch );
    return;
  }

  ch->pcdata->clan->bank += amount;
  ch->gold -= amount;
  ch->pcdata->clanZeniDonated += amount;
  save_clan( ch->pcdata->clan );
  save_char_obj( ch );
  pager_printf( ch, "You deposit %s zeni into your clans bank account.\n\r", num_punct( amount ) );
  sprintf( buf, "%s has deposited %s zeni into the clan bank account.\n\r", ch->name, num_punct( amount ) );
  echo_to_clan( ch->pcdata->clan, buf );

  return;
}

void do_clanwithdraw( CHAR_DATA * ch, char *argument )
{
  char buf[MAX_STRING_LENGTH];
  int amount = 0;

  if( IS_NPC( ch ) )
  {
    send_to_char( "NPC's can't withdraw zeni.\n\r", ch );
    return;
  }

  if( !ch->pcdata->clan )
  {
    send_to_char( "You're not in a clan.\n\r", ch );
    return;
  }

  if( !is_owner( ch, ch->pcdata->clan ) )
  {
    ch_printf( ch, "Only the owner may withdraw funds from the clan bank account.\n\r" );
    return;
  }

  if( IS_IMMORTAL( ch ) && ch->level < 63 )
  {
    ch_printf( ch, "Access denied.\n\r" );
    return;
  }

  if( argument[0] == '\0' )
  {
    send_to_char( "Withdraw how much?\n\r", ch );
    return;
  }

  if( !is_number( argument ) )
  {
    send_to_char( "You must withdraw zeni only.\n\r", ch );
    return;
  }

  amount = atoi( argument );

  if( amount <= 0 )
  {
    send_to_char( "You must WITHDRAW zeni.\n\r", ch );
    return;
  }

  if( amount > ch->pcdata->clan->bank )
  {
    send_to_char( "That's more than the clan has!\n\r", ch );
    return;
  }

  if( ( amount + ch->gold ) > 2000000000 )
  {
    send_to_char( "You can't carry that much!\n\r", ch );
    return;
  }

  ch->pcdata->clan->bank -= amount;
  ch->gold += amount;
  save_clan( ch->pcdata->clan );
  save_char_obj( ch );
  pager_printf( ch, "You withdraw %s zeni from your clans bank account.\n\r", num_punct( amount ) );
  sprintf( buf, "%s has withdrawn %s zeni from the clan bank account.\n\r", ch->name, num_punct( amount ) );
  echo_to_clan( ch->pcdata->clan, buf );

  return;
}

void do_clanadmin( CHAR_DATA * ch, char *argument )
{
  char arg[MAX_INPUT_LENGTH];
  char arg2[MAX_INPUT_LENGTH];
  char arg3[MAX_INPUT_LENGTH];
  char buf[MAX_STRING_LENGTH];
  CHAR_DATA *victim;
  CLAN_DATA *clan;
  CLAN_DATA *vclan;
  ALLIANCE_DATA *alliance;
  /*
   * ROOM_INDEX_DATA *location;
   */
  bool L1 = FALSE;
  bool L2 = FALSE;
  bool L3 = FALSE;
  bool L4 = FALSE;
  bool L5 = FALSE;
  bool L6 = FALSE;
  /*
   * int tax = 0;
   */

  if( IS_NPC( ch ) )
  {
    send_to_char( "Huh?\n\r", ch );
    return;
  }

  if( !ch->pcdata->clan )
  {
    send_to_char( "You're not in a clan.\n\r", ch );
    return;
  }

  if( !is_leader( ch ) && !is_deity( ch ) )
  {
    send_to_char( "Only the leaders of your clan can do this.\n\r", ch );
    return;
  }

  argument = one_argument( argument, arg );

  if( arg[0] == '\0' )
  {
    ch_printf( ch, "\n\rSyntax: clanadmin (field) (value)\n\r", ch );
    ch_printf( ch, "\n\rField being one of the following:\n\r\n\r" );
    if ( IS_IMMORTAL(ch) )
    ch_printf( ch, "  www | recruit | outcast | promote | demote | taxrate\n\r" );
    else
    ch_printf( ch, "  www | outcast | promote | demote | taxrate\n\r" );
    ch_printf( ch, "  jail | release | evict | evictrank | status | &Rowner&D\n\r" );
    ch_printf( ch, "  mrank1-7 | frank1-7 | motto | desc \n\r" );
    ch_printf( ch, "\n\r&RWarning: You can only transfer ownership of the clan to another clan leader,\n\r" );
    ch_printf( ch,
               "and if you do, you will not be able to get it back, till whenever the owner\n\rtransfers it back to you.&D\n\r" );
    return;
  }

  clan = ch->pcdata->clan;

  if( !str_cmp( arg, "recruit" ) )
  {
    if ( IS_IMMORTAL(ch) )
    {
    do_induct( ch, argument );
    return;
    }
    if ( !IS_IMMORTAL(ch) )
    {
    do_say( ch, "I like boys." );
    return;
    }
  }

  if( !str_cmp( arg, "owner" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner may bestow ownership of this clan to another.\n\r" );
      return;
    }
    if( ( victim = get_char_room( ch, argument ) ) == NULL )
    {
      send_to_char( "They are not here.\n\r", ch );
      return;
    }

    if( is_deity( victim ) )
    {
      ch_printf( ch, "You can't make the clan admin the owner too.\n\r" );
      return;
    }
    if( !is_leader( victim ) )
    {
      ch_printf( ch, "You can only give ownership to someone who is a leader.\n\r" );
      return;
    }
    STRFREE( clan->owner );
    clan->owner = STRALLOC( victim->name );
    save_clan( clan );
    ch_printf( ch, "You have given ownership of the clan to %s.\n\r", victim->name );
    ch_printf( victim, "%s has given you ownership of the clan.\n\r", ch->name );
    return;
  }

  if( !str_cmp( arg, "outcast" ) )
  {
    do_outcast( ch, argument );
    return;
  }

  if( !str_cmp( arg, "mrank1" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->mRank1 );
    clan->mRank1 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "mrank2" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->mRank2 );
    clan->mRank2 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "mrank3" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->mRank3 );
    clan->mRank3 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "mrank4" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->mRank4 );
    clan->mRank4 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "mrank5" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->mRank5 );
    clan->mRank5 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "mrank6" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->mRank6 );
    clan->mRank6 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "mrank7" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->mRank7 );
    clan->mRank7 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "fRank1" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->fRank1 );
    clan->fRank1 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "fRank2" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->fRank2 );
    clan->fRank2 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "fRank3" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->fRank3 );
    clan->fRank3 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "fRank4" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->fRank4 );
    clan->fRank4 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "fRank5" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->fRank5 );
    clan->fRank5 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "fRank6" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->fRank6 );
    clan->fRank6 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }
  if( !str_cmp( arg, "fRank7" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change rank names.\n\r" );
      return;
    }
    STRFREE( clan->fRank7 );
    clan->fRank7 = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }

  if( !str_cmp( arg, "motto" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change the clan motto.\n\r" );
      return;
    }
    STRFREE( clan->motto );
    clan->motto = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }

  if( !str_cmp( arg, "desc" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change the clan description.\n\r" );
      return;
    }
    STRFREE( clan->description );
    clan->description = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }

  if( !str_cmp( arg, "evict" ) || !str_cmp( arg, "evictrank" ) )
  {
    send_to_char( "This feature isn't implemented yet.\n\r", ch );
    return;
  }
  /*
   * if(!str_cmp(arg, "jail"))
   * {
   * if (!clan->clanJail)
   * {
   * send_to_char( "Your clan hasn't built a jail yet.\n\r", ch );
   * return;
   * }
   * 
   * if ((victim = get_char_room(ch, argument)) == NULL)
   * {
   * send_to_char( "They are not here.\n\r", ch );
   * return;
   * }
   * 
   * if (IS_NPC(ch) || !ch->pcdata->clan || ch->pcdata->clan != clan)
   * {
   * send_to_char( "They are not a member of your clan.\n\r", ch );
   * return;
   * }
   * 
   * if (is_deity(victim) || is_leader(victim))
   * {
   * send_to_char( "You can't jail that person.\n\r", ch );
   * return;
   * }
   * 
   * location = get_room_index(clan->clanJail);
   * act( AT_RED, "$n is hauled off to jail.", victim, NULL, NULL, TO_ROOM );
   * char_from_room( victim );
   * char_to_room( victim, location );
   * save_char_obj( victim );
   * act( AT_RED, "$n is tossed into the jail cell.", victim, NULL, NULL, TO_ROOM );
   * act( AT_RED, "You are hauled off to jail and tossed into the jail cell.", ch, NULL, victim, TO_VICT );
   * do_look( victim, "auto" );
   * }
   */
  /*
   * if(!str_cmp(arg, "release"))
   * {
   * if (!clan->clanJail)
   * {
   * send_to_char( "Your clan hasn't built a jail yet.\n\r", ch );
   * return;
   * }
   * 
   * if ((victim = get_char_world(ch, argument)) == NULL)
   * {
   * send_to_char( "Wait until they are online.\n\r", ch );
   * return;
   * }
   * 
   * if (IS_NPC(ch) || !ch->pcdata->clan || ch->pcdata->clan != clan)
   * {
   * send_to_char( "They are not a member of your clan.\n\r", ch );
   * return;
   * }
   * 
   * if (victim->in_room->vnum != clan->clanJail)
   * {
   * send_to_char( "They are not in your jail.\n\r", ch );
   * return;
   * }
   * 
   * act( AT_RED, "$n is released from jail.", victim, NULL, NULL, TO_ROOM );
   * char_from_room( victim );
   * char_to_room( victim, ch->in_room );
   * save_char_obj( victim );
   * act( AT_RED, "$n is brought in from jail.", victim, NULL, NULL, TO_ROOM );
   * act( AT_RED, "You've been released from jail.", ch, NULL, victim, TO_VICT );
   * do_look( victim, "auto" );
   * }
   */
  if( !str_cmp( arg, "www" ) )
  {
    if( !is_owner( ch, clan ) )
    {
      ch_printf( ch, "Only the owner can change the clan website address.\n\r" );
      return;
    }
    STRFREE( clan->clanWebSite );
    clan->clanWebSite = STRALLOC( argument );
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    return;
  }

  /*
   * if (!str_cmp( arg, "taxrate" ))
   * {
   * if (!is_number(argument))
   * {
   * send_to_char( "Tax rate must be a number between 0 and 25.\n\r", ch );
   * return;
   * }
   * tax = atoi(argument);
   * if (tax > 25 || tax < 0)
   * {
   * send_to_char( "Tax rate must be a number between 0 and 25.\n\r", ch );
   * return;
   * }
   * if (clan->bank < 250000)
   * {
   * send_to_char( "It costs 250,000 zeni to change the tax rate.\n\r", ch );
   * return;
   * }
   * clan->tax = tax;
   * clan->bank -= 250000;
   * send_to_char( "Done.\n\r", ch );
   * save_clan( clan );
   * return;
   * }
   */
  if( !str_cmp( arg, "promote" ) )
  {
    if( ( victim = get_char_room( ch, argument ) ) == NULL )
    {
      send_to_char( "They are not here.\n\r", ch );
      return;
    }
    if( ch == victim )
    {
      ch_printf( ch, "You can't promote yourself.\n\r" );
      return;
    }

    if( IS_NPC( ch ) || !ch->pcdata->clan || ch->pcdata->clan != clan )
    {
      send_to_char( "They are not a member of your clan.\n\r", ch );
      return;
    }

    if( is_deity( victim ) )
    {
      send_to_char( "You can't promote your clans admin.\n\r", ch );
      return;
    }

    if( victim->pcdata->clanRank <= 2 && !is_leader( victim ) && !is_owner( ch, ch->pcdata->clan ) && !is_deity( ch ) )
    {
      /*
       * send_to_char( "You can't promote someone to a leader without contacting your clan admin.\n\r", ch );
       */
      ch_printf( ch, "Only the clan admin or owner may promote others to a leader.\n\r" );
      return;
    }

    if( !str_cmp( clan->leader1, "None" ) )
      L1 = TRUE;
    else
      L1 = FALSE;
    if( !str_cmp( clan->leader2, "None" ) )
      L2 = TRUE;
    else
      L2 = FALSE;
    if( !str_cmp( clan->leader3, "None" ) )
      L3 = TRUE;
    else
      L3 = FALSE;
    if( !str_cmp( clan->leader4, "None" ) )
      L4 = TRUE;
    else
      L4 = FALSE;
    if( !str_cmp( clan->leader5, "None" ) )
      L5 = TRUE;
    else
      L5 = FALSE;
    if( !str_cmp( clan->leader6, "None" ) )
      L6 = TRUE;
    else
      L6 = FALSE;

    switch ( victim->pcdata->clanRank )
    {
      default:
        send_to_char( "Unknown rank.\n\r", ch );
        bug( "clanadmin: undknown rank set for %s(%d)", victim->name, victim->pcdata->clanRank );
        return;
      case 7:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank7Count--;
          clan->fRank6Count++;
        }
        else
        {
          clan->mRank7Count--;
          clan->mRank6Count++;
        }
        break;
      case 6:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank6Count--;
          clan->fRank5Count++;
        }
        else
        {
          clan->mRank6Count--;
          clan->mRank5Count++;
        }
        break;
      case 5:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank5Count--;
          clan->fRank4Count++;
        }
        else
        {
          clan->mRank5Count--;
          clan->mRank4Count++;
        }
        break;
      case 4:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank4Count--;
          clan->fRank3Count++;
        }
        else
        {
          clan->mRank4Count--;
          clan->mRank3Count++;
        }
        break;
      case 3:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank3Count--;
          clan->fRank2Count++;
        }
        else
        {
          clan->mRank3Count--;
          clan->mRank2Count++;
        }
        break;
      case 2:
        if( !L1 && !L2 && !L3 && !L4 && !L5 && !L6 )
        {
          ch_printf( ch, "You can't promote any more leaders now. The leader ranks are full.\n\r" );
          return;
        }
        if( L1 )
          clan->leader1 = STRALLOC( victim->name );
        else if( L2 )
          clan->leader2 = STRALLOC( victim->name );
        else if( L3 )
          clan->leader3 = STRALLOC( victim->name );
        else if( L4 )
          clan->leader4 = STRALLOC( victim->name );
        else if( L5 )
          clan->leader5 = STRALLOC( victim->name );
        else if( L6 )
          clan->leader6 = STRALLOC( victim->name );
        else
        {
          ch_printf( ch, "A bug has occured in clanadmin promote. Contact an imm immediately.\n\r" );
          return;
        }

        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank2Count--;
          clan->fRank1Count++;
        }
        else
        {
          clan->mRank2Count--;
          clan->mRank1Count++;
        }
        break;
    }

    victim->pcdata->clanRank--;
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    save_char_obj( victim );
    sprintf( buf, "%s has been promoted to %s", victim->name, get_clanTitle( victim ) );
    echo_to_clan( clan, buf );
    return;
  }

  if( !str_cmp( arg, "demote" ) )
  {
    if( ( victim = get_char_room( ch, argument ) ) == NULL )
    {
      send_to_char( "They are not here.\n\r", ch );
      return;
    }
    if( ch == victim )
    {
      ch_printf( ch, "You can't demote yourself.\n\r" );
      return;
    }
    if( IS_NPC( ch ) || !ch->pcdata->clan || ch->pcdata->clan != clan )
    {
      send_to_char( "They are not a member of your clan.\n\r", ch );
      return;
    }

    if( is_deity( victim ) )
    {
      send_to_char( "You can't demote your clans admin.\n\r", ch );
      return;
    }

    if( victim->pcdata->clanRank <= 1 && !is_owner( ch, ch->pcdata->clan ) )
    {
      /*
       * send_to_char( "You can't demote a leader without contacting your clan admin.\n\r", ch );
       */
      ch_printf( ch, "Only the clan admin or owner may demote leaders.\n\r" );
      return;
    }

    switch ( victim->pcdata->clanRank )
    {
      default:
        send_to_char( "Unknown rank.\n\r", ch );
        bug( "clanadmin: undknown rank set for %s(%d)", victim->name, victim->pcdata->clanRank );
        return;
      case 6:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank7Count++;
          clan->fRank6Count--;
        }
        else
        {
          clan->mRank7Count++;
          clan->mRank6Count--;
        }
        break;
      case 5:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank6Count++;
          clan->fRank5Count--;
        }
        else
        {
          clan->mRank6Count++;
          clan->mRank5Count--;
        }
        break;
      case 4:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank5Count++;
          clan->fRank4Count--;
        }
        else
        {
          clan->mRank5Count++;
          clan->mRank4Count--;
        }
        break;
      case 3:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank4Count++;
          clan->fRank3Count--;
        }
        else
        {
          clan->mRank4Count++;
          clan->mRank3Count--;
        }
        break;
      case 2:
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank3Count++;
          clan->fRank2Count--;
        }
        else
        {
          clan->mRank3Count++;
          clan->mRank2Count--;
        }
        break;
      case 1:
        if( !str_cmp( victim->name, clan->leader1 ) )
        {
          STRFREE( clan->leader1 );
          clan->leader1 = STRALLOC( "None" );
        }
        else if( !str_cmp( victim->name, clan->leader2 ) )
        {
          STRFREE( clan->leader2 );
          clan->leader2 = STRALLOC( "None" );
        }
        else if( !str_cmp( victim->name, clan->leader3 ) )
        {
          STRFREE( clan->leader3 );
          clan->leader3 = STRALLOC( "None" );
        }
        else if( !str_cmp( victim->name, clan->leader4 ) )
        {
          STRFREE( clan->leader4 );
          clan->leader4 = STRALLOC( "None" );
        }
        else if( !str_cmp( victim->name, clan->leader5 ) )
        {
          STRFREE( clan->leader5 );
          clan->leader5 = STRALLOC( "None" );
        }
        else if( !str_cmp( victim->name, clan->leader6 ) )
        {
          STRFREE( clan->leader6 );
          clan->leader6 = STRALLOC( "None" );
        }
        else
        {
          ch_printf( ch, "A bug has occured in clanadmin demote. Contact an imm immediately.\n\r" );
        }
        if( victim->sex == SEX_FEMALE )
        {
          clan->fRank2Count++;
          clan->fRank1Count--;
        }
        else
        {
          clan->mRank2Count++;
          clan->mRank1Count--;
        }
        break;

    }

    victim->pcdata->clanRank++;
    send_to_char( "Done.\n\r", ch );
    save_clan( clan );
    save_char_obj( victim );
    sprintf( buf, "%s has been demoted to %s", victim->name, get_clanTitle( victim ) );
    echo_to_clan( clan, buf );
    return;
  }


  if( !str_cmp( arg, "status" ) )
  {
    argument = one_argument( argument, arg2 );
    argument = one_argument( argument, arg3 );

    if( arg2[0] == '\0' || arg3[0] == '\0' )
    {
      send_to_char( "\n\rTo change status type 'clanadmin status [clan] [allied|friendly|neutral|hostile|atwar]'.\n\r", ch );
      show_alliances( ch, clan );
      return;
    }

    if( ( vclan = get_clan( arg2 ) ) == NULL )
    {
      send_to_char( "That's not a clan.  Type 'clans' for a list.\n\r", ch );
      return;
    }

    if( clan == vclan )
    {
      send_to_char( "Your clan already has a perfect alliance with its self.\n\r", ch );
      return;
    }

    if( !str_cmp( arg3, "neutral" ) )
    {
      if( allianceStatus( clan, vclan ) == ALLIANCE_NEUTRAL )
      {
        ch_printf( ch, "Your clan already is neutral with them!\n\r" );
        return;
      }
      alliance = get_alliance( clan, vclan );
      alliance->votes = 0;
      if( str_cmp( alliance->leader1Vote, "None" ) )
      {
        STRFREE( alliance->leader1Vote );
        alliance->leader1Vote = STRALLOC( "None" );
      }
      if( str_cmp( alliance->leader2Vote, "None" ) )
      {
        STRFREE( alliance->leader2Vote );
        alliance->leader2Vote = STRALLOC( "None" );
      }

      if( !change_alliance( clan, vclan, ALLIANCE_NEUTRAL ) )
      {
        /*
         * send_to_char( "Error changing status.  Please notify your clan admin.\n\r", ch );
         */
        return;
      }
      /*
       * else
       * send_to_char( "Status changed.\n\r", ch );
       */
    }
    else if( !str_cmp( arg3, "friendly" ) )
    {
      if( allianceStatus( clan, vclan ) == ALLIANCE_FRIENDLY )
      {
        ch_printf( ch, "Your clan already is friendly with them!\n\r" );
        return;
      }
      alliance = get_alliance( clan, vclan );
      alliance->votes = 0;
      if( str_cmp( alliance->leader1Vote, "None" ) )
      {
        STRFREE( alliance->leader1Vote );
        alliance->leader1Vote = STRALLOC( "None" );
      }
      if( str_cmp( alliance->leader2Vote, "None" ) )
      {
        STRFREE( alliance->leader2Vote );
        alliance->leader2Vote = STRALLOC( "None" );
      }

      if( !change_alliance( clan, vclan, ALLIANCE_FRIENDLY ) )
      {
        /*
         * send_to_char( "Error changing status.  Please notify your clan admin.\n\r", ch );
         */
        return;
      }
      /*
       * else
       * send_to_char( "Status changed.\n\r", ch );
       */
    }
    else if( !str_cmp( arg3, "allied" ) )
    {
      if( allianceStatus( clan, vclan ) == ALLIANCE_ALLIED )
      {
        ch_printf( ch, "Your clan already is allied with them!\n\r" );
        return;
      }
      alliance = get_alliance( clan, vclan );
      alliance->votes = 0;
      if( str_cmp( alliance->leader1Vote, "None" ) )
      {
        STRFREE( alliance->leader1Vote );
        alliance->leader1Vote = STRALLOC( "None" );
      }
      if( str_cmp( alliance->leader2Vote, "None" ) )
      {
        STRFREE( alliance->leader2Vote );
        alliance->leader2Vote = STRALLOC( "None" );
      }

      if( !change_alliance( clan, vclan, ALLIANCE_ALLIED ) )
      {
        /*
         * send_to_char( "Error changing status.  Please notify your clan admin.\n\r", ch );
         */
        return;
      }
      /*
       * else
       * send_to_char( "Status changed.\n\r", ch );
       */
      /*
       * if (allianceStatus( clan, vclan) == ALLIANCE_ALLIED)
       * {
       * sprintf(buf, "&C%s and %s are now allies.\n\r", clan->name, vclan->name);
       * echo_to_clan(clan, buf);
       * echo_to_clan(vclan, buf);
       * }
       */
    }
    else if( !str_cmp( arg3, "hostile" ) )
    {
      if( allianceStatus( clan, vclan ) == ALLIANCE_HOSTILE )
      {
        ch_printf( ch, "Your clan already is hostile with them!\n\r" );
        return;
      }
      alliance = get_alliance( clan, vclan );
      alliance->votes = 0;
      if( str_cmp( alliance->leader1Vote, "None" ) )
      {
        STRFREE( alliance->leader1Vote );
        alliance->leader1Vote = STRALLOC( "None" );
      }
      if( str_cmp( alliance->leader2Vote, "None" ) )
      {
        STRFREE( alliance->leader2Vote );
        alliance->leader2Vote = STRALLOC( "None" );
      }

      if( !change_alliance( clan, vclan, ALLIANCE_HOSTILE ) )
      {
        /*
         * send_to_char( "Error changing status.  Please notify your clan admin.\n\r", ch );
         */
        return;
      }
      /*
       * else
       * send_to_char( "Status changed.\n\r", ch );
       */
    }
    else if( !str_cmp( arg3, "atwar" ) )
    {

      if( allianceStatus( clan, vclan ) == ALLIANCE_ATWAR )
      {
        ch_printf( ch, "Your clan already is at war with them!\n\r" );
        return;
      }

      alliance = get_alliance( clan, vclan );

      if( !alliance )
      {
        CREATE( alliance, ALLIANCE_DATA, 1 );
        alliance->clan = clan;
        alliance->vclan = vclan;
        alliance->status = 0;
        alliance->vclanStatus = 0;
        alliance->votes = 0;
        alliance->leader1Vote = STRALLOC( "" );
        alliance->leader2Vote = STRALLOC( "" );
        LINK( alliance, first_alliance, last_alliance, next, prev );
      }

      if( alliance->votes < 2 )
      {
        if( alliance->votes == 1 )
        {
          if( !str_cmp( alliance->leader1Vote, ch->name ) )
          {
            ch_printf( ch, "You can't vote twice!\n\r" );
            return;
          }
          STRFREE( alliance->leader2Vote );

          alliance->leader2Vote = STRALLOC( ch->name );
          alliance->votes++;
          sprintf( buf, "%s has voted to go to war with %s!", ch->name, vclan->name );
          echo_to_clan( clan, buf );
          ch_printf( ch,
                     "You have cast the second of two votes neccessary to go to war. You may now change the alliance to AT WAR status.\n\r" );
          return;
        }
        else
        {
          STRFREE( alliance->leader1Vote );

          alliance->leader1Vote = STRALLOC( ch->name );
          alliance->votes++;
          sprintf( buf, "%s has voted to go to war with %s!", ch->name, vclan->name );
          echo_to_clan( clan, buf );
          ch_printf( ch, "You have cast the first of two votes neccessary to go to war.\n\r" );
          return;
        }
      }
      else
      {
        if( !change_alliance( clan, vclan, ALLIANCE_ATWAR ) )
        {
          /*
           * send_to_char( "Error changing status.  Please notify your clan admin.\n\r", ch );
           */
          return;
        }
        /*
         * else
         * alliance_towar(ch, clan, vclan);
         */
      }
    }
    else
    {
      send_to_char( "Choices are: allied, friendly, neutral, hostile, atwar.\n\r", ch );
      return;
    }

    return;
  }

  /*
   * send_to_char( "Syntax: [www|recruit|outcast|promote|demote|taxrate|jail|release|evict|evictrank|status]\n\r", ch );
   */
  do_clanadmin( ch, "" );
  return;
}

void do_resetalliances( CHAR_DATA * ch, char *argument )
{
  CLAN_DATA *clan;
  CLAN_DATA *aclan;
  ALLIANCE_DATA *alliance;

  for( clan = first_clan; clan; clan = clan->next )
  {
    for( aclan = first_clan; aclan; aclan = aclan->next )
    {
      if( aclan == clan )
        continue;

      CREATE( alliance, ALLIANCE_DATA, 1 );
      alliance->clan = clan;
      alliance->vclan = aclan;
      alliance->status = 0;
      alliance->vclanStatus = 0;
      alliance->votes = 0;
      alliance->leader1Vote = STRALLOC( "" );
      alliance->leader2Vote = STRALLOC( "" );
      LINK( alliance, first_alliance, last_alliance, next, prev );
    }
  }
  save_alliance(  );
  return;
}

void do_clanrecall( CHAR_DATA * ch, char *argument )
{
  CLAN_DATA *clandata = NULL;
  char buf[MAX_STRING_LENGTH];

  if( !ch->desc )
    return;

  clandata = ch->pcdata->clan;

  if( !clandata )
  {
    send_to_char( "You don\'t have a clan.\n\r", ch );
    return;
  }
  if( !clandata->recall )
  {
    send_to_char( "Your clan doesn\'t have a recall point.", ch );
    return;
  }

  if( xIS_SET( ch->in_room->room_flags, ROOM_NO_RECALL ) || IS_AFFECTED( ch, AFF_DEAD ) )
  {
    send_to_char_color( "&C&wYou can\'t go to your clan from here.\n\r", ch );
    return;
  }
  if( ch->in_room->vnum == 8 )
  {
    send_to_char( "You're in hell--you can't go to your clan.\n\r", ch );
    return;
  }

  if( ch->pcdata->gohometimer > 0 )
  {
    ch_printf( ch, "You can't go to your clan for another %d minutes", ch->pcdata->gohometimer );
    return;
  }

  switch ( ch->position )
  {
    default:
      break;
    case POS_MORTAL:
    case POS_INCAP:
    case POS_DEAD:
    case POS_STUNNED:
      send_to_char_color( "&C&wYou can\'t do that, you\'re hurt too badly.\n\r", ch );
      return;
    case POS_SITTING:
    case POS_RESTING:
    case POS_SLEEPING:
      do_wake( ch, "auto" );
      return;
    case POS_FIGHTING:
    case POS_DEFENSIVE:
    case POS_AGGRESSIVE:
    case POS_BERSERK:
    case POS_EVASIVE:
      send_to_char_color( "&C&wNo way!  You are still fighting!\n\r", ch );
      return;
  }

  sprintf( buf, "%s disappears to their clan\'s headquarters.", ch->name );
  act( AT_GREY, buf, ch, NULL, ch, TO_ROOM );


  char_from_room( ch );
  char_to_room( ch, get_room_index( clandata->recall ) );

  sprintf( buf, "As a vortex of luminescent light forms, %s slides gracefully through into their clan headquarters.",
           ch->name );
  act( AT_GREY, buf, ch, NULL, ch, TO_ROOM );

  do_look( ch, "" );

  return;
}