wolfpaw4.0-release/area/
wolfpaw4.0-release/backup/
wolfpaw4.0-release/bin/
wolfpaw4.0-release/boards/
wolfpaw4.0-release/clans/
wolfpaw4.0-release/councils/
wolfpaw4.0-release/deity/
wolfpaw4.0-release/finger/
wolfpaw4.0-release/gods/
wolfpaw4.0-release/guilds/
wolfpaw4.0-release/lockers/
wolfpaw4.0-release/log/
wolfpaw4.0-release/log/Clean/
wolfpaw4.0-release/maps/
wolfpaw4.0-release/offline_data/
wolfpaw4.0-release/player-obj/
wolfpaw4.0-release/player-obj/a/
wolfpaw4.0-release/player/
wolfpaw4.0-release/player/a/
wolfpaw4.0-release/plog/
wolfpaw4.0-release/save-rooms/
wolfpaw4.0-release/secure/
wolfpaw4.0-release/source/
wolfpaw4.0-release/source/betasrc/system/
wolfpaw4.0-release/source/betasrc/util/
wolfpaw4.0-release/system/clean-source/
wolfpaw4.0-release/system/clean-source/grux/
/*--------------------------------------------------------------------------*
 *                         ** WolfPaw 1.0 **                                *
 *--------------------------------------------------------------------------*
 *               WolfPaw 1.0 (c) 1997,1998 by Dale Corse                    *
 *--------------------------------------------------------------------------*
 *            The WolfPaw Coding Team is headed by: Greywolf                *
 *  With the Assitance from: Callinon, Dhamon, Sentra, Wyverns, Altrag      *
 *  Scryn, Thoric, Justice, Tricops and Mask.                               *
 *--------------------------------------------------------------------------*
 *		     Revised Clan Functions 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_CLANS 	5
#define MAX_GUILDS	5
#define MAX_ORDERS	5

void pit_monster( OBJ_DATA *pit, CHAR_DATA *ch );


/*
 * 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 ) )
         return clan;
    return NULL;
}

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;
    ZONE_DATA *in_zone;

    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->leader )
    &&   str_cmp( ch->name, clan->deity )
    &&  (clan->clan_type != CLAN_GUILD )
    &&   ch->pcdata->clevel < 8 )
    {
        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,1 );
    level = 40;

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

    if ( !pObjIndex || !is_name( arg, pObjIndex->name ) )
    {
        send_to_char( "You don't know how to make that.\n\r", ch );
        return;
    }
    in_zone = find_zone(1);
    obj = create_object( pObjIndex, 1, in_zone );
    SET_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_clan( CHAR_DATA *ch, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
    char arg2[MAX_INPUT_LENGTH];
    char arg3[MAX_INPUT_LENGTH];
    char buf[MSL];
    CHAR_DATA *victim;
    CLAN_DATA *clan;
    int level;

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

    clan = ch->pcdata->clan;

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

    if ( arg[0] == '\0')
    {
        send_to_char( "clan <char> <Member|dismember|level #> \n\r", ch);
        return;
    }

    if ( ( victim = get_char_world( 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 ( !str_cmp( arg2, "dismember" ) )
{

 if ( !IS_IMMORTAL(ch) && victim->pcdata->clan != ch->pcdata->clan )
  {
   send_to_char( " That player isnt even in your clan!", ch);
    return;
 }

 if ( ch->pcdata->clevel <= 7 && ch != victim )
{
send_to_char( "Your to Lowly for that!", ch );
return;
}

 if ( !IS_IMMORTAL(ch) && ch->pcdata->clevel <= victim->pcdata->clevel && ch !=victim )
   {
   send_to_char( "You cant do that.", ch );
   return;
     }


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

    victim->pcdata->clevel = 1;
    victim->pcdata->clan = NULL;
    STRFREE(victim->pcdata->clan_name);
    victim->pcdata->clan_name = STRALLOC( "" );
    act( AT_MAGIC, "You dismember $N from $t", ch, clan->fullname,victim,TO_CHAR);
    act( AT_MAGIC, "$n dismembers $N from $t", ch, clan->fullname, victim,TO_ROOM);
    act( AT_MAGIC, "$n has kicked you out of $t",ch,clan->fullname,victim,TO_VICT);
    victim->pcdata->start_room = 30601;

    sprintf(buf,"%s has removed %s from %s",QUICKLINK(ch->name),
        QUICKLINK(victim->name),clan->fullname );
    log_string(buf);
    save_char_obj( victim );    /* clan gets saved when pfile is saved */
    return;
}


  else if ( !str_cmp( arg2, "member" ) )
{

        if ( victim->level < 15 )
        {
            send_to_char( "This player is not worthy of joining yet.\n\r",ch );
            return;
        }
        if ( IS_SET(victim->act, PLR_OUTCAST) )
        {
        send_to_char("This character may not be membered, they have been outcast\n\r",ch);
        return;
        }

    if ( !IS_IMMORTAL(ch) && victim->pcdata->clan )
    {
        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 ( ch->pcdata->clevel <= 7 )
{
send_to_char( "Your to Lowly for that!", ch );
return;
}

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

    victim->pcdata->clan = clan;
    STRFREE(victim->pcdata->clan_name);
    victim->pcdata->clan_name = QUICKLINK( clan->name );
    act( AT_MAGIC, "You member $N into $t",ch,clan->fullname,victim,TO_CHAR );
    act( AT_MAGIC, "$n has membered $N into $t", ch,clan->fullname,victim, TO_ROOM);
    act( AT_MAGIC, "You are now a Member of $t", ch,clan->fullname,victim, TO_VICT);
    victim->pcdata->clevel = 1;
    sprintf(buf,"%s has Membered %s into %s",QUICKLINK(ch->name),
        QUICKLINK(victim->name),clan->fullname );
    log_string(buf);
    save_char_obj( victim );
    return;
}


 else  if ( !str_cmp( arg2, "level" ) );
{
bool raised;

 if ( ch->pcdata->clevel <= 8 )
{
send_to_char( "Your to Lowly for that!", ch );
return;
}

 if ( !IS_IMMORTAL(ch) && victim->pcdata->clan != ch->pcdata->clan )
  {
   send_to_char( " That player isnt even in your clan!", ch);
    return;
 }
    if ( ( level = atoi( arg2 ) ) < 1 || level > 10 )
    {
        send_to_char( "Level must be 1 to 10.\n\r", ch );
        return;
    }
   if ( ( level = atoi( arg2 ) ) > ch->pcdata->clevel )
  {
   send_to_char( "You cant give away clan ranks you dont have!", ch );
   return;
  }

   if ( level == victim->pcdata->clevel )
   {
        send_to_char("But that is not higher or lower!\n\r",ch);
        return;
   }

   if ( level > victim->pcdata->clevel )
        raised = TRUE;
      else
        raised = FALSE;

     if ( raised )
        act( AT_MAGIC, "You advance $N's clan rank.",ch,NULL,victim,TO_CHAR);
     else
        act( AT_MAGIC, "You decrease $N's clan rank.",ch,NULL,victim,TO_CHAR);

        sprintf(buf,"%s to clan rank %d by %s",QUICKLINK(victim->name),
                level,QUICKLINK(ch->name));
        log_string(buf);
        victim->pcdata->clevel = level;
 
   ch_printf(victim,"You clan rank has been %s to %d.\n\r",
        raised == TRUE ? "raised" : "lowered", victim->pcdata->clevel);

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

send_to_char("Eh?\n\r",ch);
return;
}

void do_guild( CHAR_DATA *ch, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
    char arg2[MAX_INPUT_LENGTH];
    char arg3[MAX_INPUT_LENGTH];
    CHAR_DATA *victim;
    CLAN_DATA *guild;
    int iLevel;
    int level;

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

    guild = ch->pcdata->guild;

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

    if ( arg[0] == '\0')
    {
        send_to_char( "guild <char> <Member|dismember|level #> \n\r", ch);
        return;
    }

    if ( ( victim = get_char_world( 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 ( !str_cmp( arg2, "dismember" ) )
    {

    if ( !IS_IMMORTAL(ch) && victim->pcdata->guild != ch->pcdata->guild )
    {
      send_to_char( " That player isnt even in your guild!", ch);
      return;
    }

    if ( ch->pcdata->guildlevel <= 7 && ch != victim )
    {
     send_to_char( "Your to Lowly for that!", ch );
     return;
    }

    if ( !IS_IMMORTAL(ch) && ch->pcdata->guildlevel <= victim->pcdata->guildlevel && ch !=victim )
    {
      send_to_char( "You cant do that.", ch );
      return;
    }

    --guild->members;

    victim->pcdata->guildlevel = 1;
    victim->pcdata->guild = NULL;
    STRFREE(victim->pcdata->guild_name);
    victim->pcdata->guild_name = STRALLOC( "" );
    act( AT_MAGIC, "You dismember $N from $t", ch, guild->name,victim,TO_CHAR );
    act( AT_MAGIC, "$n dismembers $N from $t", ch, guild->name,victim,TO_ROOM );
    act( AT_MAGIC, "$n has DISMEMBERED YOU FROM $t", ch,guild->name,victim, TO_VICT);
    victim->pcdata->start_room = 30601;
    save_char_obj( victim );    /* clan gets saved when pfile is saved */
    return;
   }


  else if ( !str_cmp( arg2, "member" ) )
  {

        if ( victim->level < 50 && victim->level2 < 50 )
        {
            send_to_char( "This player is not worthy of joining yet.\n\r",ch );
            return;
        }

        if ( IS_SET(victim->act, PLR_OUTCAST) )
        {
        send_to_char("This character may not be membered, they have been outcast.\n\r",ch);
        return;
        }

        if ( !IS_IMMORTAL(ch) && victim->pcdata->guild )
        {
        if ( victim->pcdata->guild == guild )
          send_to_char( "This player already belongs to your guild!\n\r",ch );
        else
          send_to_char( "This player already belongs to a guild!\n\r",ch);
        return;
      }

 if ( ch->pcdata->guildlevel <= 7 )
 {
   send_to_char( "Your to Lowly for that!", ch );
   return;
 }

    guild->members++;

    victim->pcdata->guild = guild;
    STRFREE(victim->pcdata->guild_name);
    victim->pcdata->guild_name = QUICKLINK( guild->name );
    act( AT_MAGIC, "You member $N into $t",ch,guild->name,victim,TO_CHAR);
    act( AT_MAGIC, "$n has membered $N into $t", ch, guild->name,victim,TO_NOTVICT);
    act( AT_MAGIC, "You are now a Member of $t", ch, guild->name,victim,TO_VICT);
    victim->pcdata->guildlevel = 1;
    save_char_obj( victim );
    return;

}


 else  if ( !str_cmp( arg2, "level" ) );
{

 if ( ch->pcdata->guildlevel <= 8 )
 {
  send_to_char( "Your to Lowly for that!", ch );
   return;
 }

 if ( !IS_IMMORTAL(ch) && victim->pcdata->guild != ch->pcdata->guild )
  {
   send_to_char( " That player isnt even in your guild!", ch);
    return;
 }
    if ( ( level = atoi( arg2 ) ) < 1 || level > 10 )
    {
        send_to_char( "Level must be 1 to 10.\n\r", ch );
        return;
    }
   if ( ( level = atoi( arg2 ) ) > ch->pcdata->guildlevel )
  {
  send_to_char( "You cant give away guild ranks you dont have!", ch );
   return;
  }

     act( AT_MAGIC, "You advance $N's guild rank in $t", ch,guild->name,victim, TO_CHAR);
    for ( iLevel = victim->pcdata->guildlevel ; iLevel < level; iLevel++ )
    {
        if (level < 11 )
     send_to_char( "You guild rank advances!!\n\r", victim );
        victim->pcdata->guildlevel += 1;
    }

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

send_to_char("Eh?\n\r",ch);
return;
}

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

    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> <deity|leader> <player>\n\r",ch);
        send_to_char( "\n\rField being one of:\n\r", ch );
        send_to_char( "Usage: setclan <clan> <field> <deity|leader> <player>\n\r",ch);
        send_to_char( "\n\rField being one of:\n\r", ch );
        send_to_char( " deity leader align storage recall\n\r", ch );
        send_to_char( " members board morgue whoname\n\r", ch );
        send_to_char( " obj1 obj2 obj3 guard1 guard2\n\r", ch );
        if ( get_trust( ch ) >= LEVEL_GOD )
        {
          send_to_char( " name filename motto desc fullname\n\r", ch );
          send_to_char( " favour strikes type associate\n\r", ch );
        }
        return;
    }

    clan = get_clan( arg1 );
    if ( !clan )
    {
        send_to_char( "No such clan.\n\r", ch );
        return;
    }
    if ( !strcmp( arg2, "deity" ) )
    {
        STRFREE( clan->deity );
        clan->deity = STRALLOC( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "associate" ) )
    {
        STRFREE( clan->associate );
        clan->associate = STRALLOC( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "leader" ) )
    {
        STRFREE( clan->leader );
        clan->leader = STRALLOC( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "board" ) )
    {
        clan->board = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "members" ) )
    {
        clan->members = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "recall" ) )
    {
        clan->recall = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }
    if ( !strcmp( arg2, "morgue" ) )
    {
        clan->morgue = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "storage" ) )
    {
        clan->storeroom = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "obj1" ) )
    {
        clan->clanobj1 = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "obj2" ) )
    {
        clan->clanobj2 = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "obj3" ) )
    {
        clan->clanobj3 = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "guard1" ) )
    {
        clan->guard1 = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( 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 ( !strcmp( arg2, "align" ) )
    {
        clan->alignment = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( 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 ( !strcmp( arg2, "class" ) )
    {
        clan->class = atoi( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "name" ) )
    {
        STRFREE( clan->name );
        clan->name = STRALLOC( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "fullname" ) )
    {
        STRFREE( clan->fullname );
        clan->fullname = STRALLOC( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "whoname" ) )
    {
     char *old_clan_name;
     PK_LIST *first_pk=NULL, *next_pk=NULL, *new_pk=NULL;
     CLAN_DATA *cln, *next_cln;
     bool found;

	old_clan_name = STRALLOC(clan->whoname);
        STRFREE( clan->whoname );
        clan->whoname = STRALLOC( argument );

     if ( clan->clan_type == CLAN_PLAIN )
     {
	/* Change the name if its chart */
	for ( first_pk=clan->pkdata->first_clan; first_pk; first_pk=next_pk )
        {
          next_pk=first_pk->next;

	  if ( !str_cmp(first_pk->name, old_clan_name) )
	  {
	     first_pk->name = STRALLOC( argument );
	     log_string("Pk_List: Name Updated");
	     break;
	  }
	 }

	/* Add the name to all other charts, or update as needed */
	for ( cln=first_clan; cln; cln=next_cln )
	{
	   next_cln = cln->next;

	   if ( cln==clan )
	    continue;

	   if ( cln->clan_type != CLAN_PLAIN )
		continue;

	    found = FALSE;

	   /* Try and update it .. */
	   for( first_pk=cln->pkdata->first_clan; first_pk; first_pk=next_pk )
	   {
	     next_pk = first_pk->next;
	     if ( !str_cmp( first_pk->name, old_clan_name ) )
	     {
		found = TRUE;
	     	first_pk->name = STRALLOC( argument );
		save_clan(cln);
	        log_string("Pk_List: Old Name found and Updated.");
		break;
	     }
	    }

	    if ( found )
		continue;

	    /* Can't Update - add it */
	    CREATE(new_pk,PK_LIST,1);
	    new_pk->name = STRALLOC(argument);
	    new_pk->pkills = 0;
	    LINK(new_pk,cln->pkdata->first_clan,cln->pkdata->last_clan,next,prev);
	    save_clan(cln);
	    log_string("Pk_List: Added new Entry");
	 }
	}
	     
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "filename" ) )
    {
        DISPOSE( clan->filename );
        clan->filename = str_dup( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        write_clan_list( );
        return;
    }

    if ( !strcmp( arg2, "motto" ) )
    {
        STRFREE( clan->motto );
        clan->motto = STRALLOC( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    if ( !strcmp( arg2, "desc" ) )
    {
        STRFREE( clan->description );
        clan->description = STRALLOC( argument );
        send_to_char( "Done.\n\r", ch );
        save_clan( clan );
        return;
    }

    do_setclan( ch, "" );
    return;
}

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

    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.\n\r", ch );
        return;
    }

    ch_printf( ch, "Fullname: %s\n\r",clan->fullname);
    ch_printf( ch, "%s      : %s\n\rFilename: %s\n\rMotto   : %s\n\r",
                        clan->clan_type == CLAN_ORDER ? "Order" :
                       (clan->clan_type == CLAN_GUILD ? "Guild" : "Clan"),
                        clan->name,
                        clan->filename,
                        clan->motto );
    ch_printf( ch, "Description: %s\n\rDeity: %s\n\rLeader: %s\n\r",
                        clan->description,
                        clan->deity,
                        clan->leader );
    ch_printf( ch, "WhoName: %s\n\rAssociate: %s\n\r",
                        clan->whoname ? clan->whoname : "None",
                        clan->associate ? clan->associate : "None" );
    ch_printf(ch, "PKills: %6d    PDeaths: %6d\n\r",
                        clan->pkills,
                        clan->pdeaths );
    ch_printf( ch, "MKills: %6d    MDeaths: %6d\n\r",
                        clan->mkills,
                        clan->mdeaths );
    ch_printf( ch, "IllegalPK: %-6d Score: %d\n\r",
                        clan->illegal_pk,
                        clan->score );
    ch_printf( ch, "Type: %d    Favour: %6d  Strikes: %d\n\r",
                        clan->clan_type,
                       clan->favour,
                        clan->strikes );
    ch_printf( ch, "Members: %3d  Morgue %d   Alignment: %d  Class: %d\n\r",
                        clan->members,
                        clan->morgue,
                        clan->alignment,
                        clan->class );
    ch_printf( ch, "Board: %5d     Object1: %5d Object2: %5d Object3: %5d\n\r",
                        clan->board,
                        clan->clanobj1,
                        clan->clanobj2,
                        clan->clanobj3 );
    ch_printf( ch, "Recall: %5d  Storeroom: %5d  Guard1: %5d  Guard2: %5d\n\r",
                        clan->recall,
                        clan->storeroom,
                        clan->guard1,
                        clan->guard2 );
    return;
}

void do_makeclan( CHAR_DATA *ch, char *argument )
{
    char filename[256];
    CLAN_DATA *clan=NULL;
    bool found;

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

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

    CREATE( clan, CLAN_DATA, 1 );
    LINK( clan, first_clan, last_clan, next, prev );
    clan_pkill_record_setup( );
    clan->name          = STRALLOC( argument );
    clan->motto         = STRALLOC( "" );
    clan->description   = STRALLOC( "" );
    clan->deity         = STRALLOC( "" );
    clan->leader        = STRALLOC( "" );
    
}

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

    if( argument[0] == '\0' )
    {
    /* Switched deadly clan mobkills/mobdeaths to pkills -- Blodkai */
    set_char_color( AT_BLOOD, ch );
    send_to_char( "\n\rClan           Deity          Leader     Pkills\n\r",ch);
    for ( clan = first_clan; clan; clan = clan->next )
    {
        if ( clan->clan_type == CLAN_ORDER || clan->clan_type == CLAN_GUILD )
          continue;
        set_char_color( AT_NOTE, ch );
        ch_printf( ch, "%-14s %-14s %-14s", clan->name, clan->deity, clan->leader );
        set_char_color( AT_BLOOD, ch );
        ch_printf( ch, "   %7d\n\r", clan->pkills );
        count++;
    }
        send_to_char( "\n\r&rFor more information type &R'&rclans <clan>&R'&w\n\r",ch);

    if ( !count )
    {
        set_char_color( AT_BLOOD, ch);
        send_to_char( "There are no clans currently formed.\n\r", ch );
        return;
    }
    }
    else
    {
        clan = get_clan( argument );
        if( !clan )
        {
          do_clans( ch, "" );
          return;
        }
                ch_printf( ch, "&rClan     : %s\n\r", clan->fullname ?
                clan->fullname : clan->whoname );
                ch_printf( ch, "&rDeity    : &c%s\n\r", clan->deity );
                ch_printf( ch, "&rLeader   : &c%s\n\r", clan->leader );
                ch_printf( ch, "&rMembers  : &c%d\n\r", clan->members );
                ch_printf( ch, "&rAssociate: &c%s\n\r", clan->associate ? clan->associate : "&cNone" );
        }
  return;
}

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

   /* Added displaying of mkills and mdeaths    - Brittany */
    set_char_color( AT_NOTE, ch );
    send_to_char( "Order            Deity          Leader        Mkills    Mdeaths\n\r",ch);
    for ( order = first_clan; order; order = order->next )
        if ( order->clan_type == CLAN_ORDER )
        {
            ch_printf( ch, "%-16s %-14s %-14s %5d       %5d\n\r",order->name,
                order->deity, order->leader, order->mkills, order->mdeaths);
            count++;
        }

    if ( !count )
    {
        send_to_char( "There are no Orders currently formed.\n\r", ch );
        return;
    }
}

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

    /* Added guild mobkills/mobdeaths -- Blodkai */
    set_char_color( AT_NOTE, ch );
    send_to_char( "\n\rGuild                  Leader             Mkills      Mdeaths\n\r",ch);
    for ( guild = first_clan; guild; guild = guild->next )
        if ( guild->clan_type == CLAN_GUILD )
        {
            ++count;
            set_char_color( AT_YELLOW, ch );
            ch_printf( ch, "%-20s   %-14s     %-6d       %6d\n\r",guild->name,guild->leader,guild->mkills,guild->mdeaths);
        }

    set_char_color( AT_NOTE, ch );
    if ( !count )
        send_to_char( "There are no Guilds currently formed.\n\r", ch );
    else
        ch_printf( ch, "%d guilds found.\n\r", count );
}

void do_cdonate( CHAR_DATA *ch, char *argument)
{
   OBJ_DATA *pit;
   OBJ_DATA *obj;
   ROOM_INDEX_DATA *original;
   char arg[MAX_INPUT_LENGTH];
   CLAN_DATA *clan;
   bool NO_PIT=FALSE;

   argument = one_argument(argument, arg);

   if (ch == NULL )
        return;

   if (ch->pcdata->clan == NULL)
        return;

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

   original = ch->in_room;
   if (ch->position == POS_FIGHTING)
   {
      send_to_char(" You're fighting!\n\r",ch);
      return;
   }

   if ( IS_SET(ch->pcdata->flagstwo, MOREPC_HOARDER) )
   {
     send_to_char("No.\n\r",ch);
     return;
   }

   if ( (obj = get_obj_carry (ch, arg)) == NULL)
   {
      send_to_char("You do not have that!\n\r",ch);
      return;
   }
   else
   {
      if (!can_drop_obj(ch, obj) && ch->level < 51)
      {
         send_to_char("Eeek! You can't let go of it!\n\r",ch);
         return;
      }
        if ( !obj )
        return;

      if ((obj->item_type == ITEM_CORPSE_NPC) ||
         (obj->item_type == ITEM_CORPSE_PC))
      {
         send_to_char("You cannot donate that!\n\r",ch);
         return;
      }
      if (obj->timer > 0)
      {
         send_to_char("You cannot donate that.\n\r",ch);
         return;
      }

      if ( IS_SET( obj->second_flags, ITEM2_LIMITED ) )
      {
        separate_obj(obj);
        act(AT_MAGIC,"$p is destroyed as you attempt to donate it.",ch,obj,NULL,TO_CHAR);
        act(AT_MAGIC,"$p is destroyed as $n attempts to donate it.",ch,obj,NULL,TO_ROOM);
        extract_obj(obj);
        return;
      }

      if ( obj->item_type == ITEM_CONTAINER )
      {
        send_to_char("Containers cannot be donated.\n\r",ch);
        return;
      }

      if (ch->in_room != get_room_index(ROOM_VNUM_ALTAR,1))
         act(AT_PLAIN,"$n donates $p to thier clan.",ch,obj,NULL,TO_ROOM);
      act(AT_PLAIN,"You donate $p to your clan.",ch,obj,NULL,TO_CHAR);

         separate_obj(obj);
         char_from_room(ch);
         char_to_room(ch,get_room_index(ch->pcdata->clan->storeroom,1));
         if ( ( pit = get_obj_here( ch, "donation" ) ) == NULL )  
	   NO_PIT = TRUE;
         obj_from_char(obj);
	 if ( !NO_PIT )
	 {
           obj_to_obj(obj, pit );
	   pit_monster(pit,ch);
	 }
	 else
  	   obj_to_room( obj, ch->in_room );

    /* Clan storeroom checks */
    if ( IS_SET(ch->in_room->room_flags, ROOM_CLANSTOREROOM) )
        for ( clan = first_clan; clan; clan = clan->next )
          if ( clan->storeroom == ch->in_room->vnum )
            save_clan_storeroom(ch, clan);

    /* Save-Rooms --GW */
    if ( IS_SET(ch->in_room->room_flags, ROOM_SAVE) )
    save_save_room(ch);

         char_from_room(ch);
         char_to_room(ch,original);
         return;
     }
}

/*
 * Send the list of prices for clan/guild stones to a character --GW
 */
void clan_buy_list( CHAR_DATA *ch )
{
int clans=0,guilds=0,orders=0;
CLAN_DATA *temp, *temp_next;

for ( temp = first_clan; temp; temp = temp_next )
{
temp_next = temp->next;

if ( temp->clan_type == CLAN_ORDER )
  orders++;
else if ( temp->clan_type == CLAN_GUILD )
  guilds++;
else
  clans++;
}

send_to_char("\n\r",ch);
send_to_char(" *-*-* Age of the Ancients Clan/Guild Stone Price Lising *-*-*\n\r",ch);
send_to_char("\n\r",ch);
send_to_char(" Type                Price     Petitioners Signers Required\n\r",ch);
send_to_char(" ----------------------------------------------------------\n\r",ch);
send_to_char(" Guild Stone      400,000,000       25 Signitures\n\r",ch);
send_to_char(" Order Stone      750,000,000       35 Signitures\n\r",ch);
send_to_char(" PK Clan Stone    900,000,000       50 Signitures\n\r",ch);   
send_to_char("\n\r",ch);
ch_printf(ch, " Availablity:  Guilds [%d/%d]  Orders [%d/%d]  Clans [%d/%d]\n\r",
		guilds, MAX_GUILDS, orders, MAX_ORDERS, clans, MAX_CLANS ); 
send_to_char("\n\r",ch);
send_to_char("Note: Fees are 10,000,000 per month.\n\r",ch);
return;
}

void clan_buy( CHAR_DATA *ch, char *argument )
{
char arg[MSL];

one_argument( argument, arg );

if ( !str_prefix( arg, "guild stone" ) )
{
send_to_char("Not Currently Available\n\r",ch);
return;
}
if ( !str_prefix( arg, "pk clan stone" ) )
{
send_to_char("Not Currently Available\n\r",ch);
return;
}
if ( !str_prefix( arg, "order stone" ) )
{
send_to_char("Not Currently Available\n\r",ch);
return;
}

send_to_char("Buy What?\n\r",ch);
return;
}

/*
 * Donation Pit Monster - eats limited items if theres more then 2 --GW
 */
void pit_monster( OBJ_DATA *pit, CHAR_DATA *ch )
{
OBJ_DATA *obj, *next_obj;
CLAN_DATA *clan;
LIMIT_DATA *limit;

/* No Pit - try and find it --GW */
if ( !pit && ch )
{
 if ( ( pit = get_obj_here( ch, "donation" ) ) == NULL )  
 {
   bug("Pit_Monster: Null Pit! (V:%d)",ch->in_room->vnum);
   return;
 }
}

act(AT_PLAIN,"&RThe Pit Monster looks in the pit.. licking his lips.&w&W",ch,NULL,NULL,TO_ROOM);
act(AT_PLAIN,"&RThe Pit Monster looks in the pit.. licking his lips.&w&W",ch,NULL,NULL,TO_CHAR);

for ( obj=pit->first_content; obj; obj=next_obj )
{
  next_obj = obj->next_content;
  if ( IS_LIMITED(obj) )
  {
   int delete_cnt=0;
   OBJ_DATA *delete= NULL;

    /* over limit eq */
    limit=limit_lookup(obj->pIndexData->area->zone->number,obj->pIndexData->vnum);
    if ( limit->loaded > limit->limit )
    {
         act(AT_PLAIN,"&RThe Pit Monster eats $p! &C*Burp*&w&W",ch,obj,NULL,TO_ROOM);
         act(AT_PLAIN,"&RThe Pit Monster eats $p! &C*Burp*&w&W",ch,obj,NULL,TO_CHAR);
         separate_obj(obj);
         obj_from_obj(obj);
         extract_obj(obj);
	 continue;
    }

    /* Scan the pit for the next occurance(s) */
    if ( obj->count > 2 )
      obj->count = 2;

    delete_cnt = obj->count;
    for ( delete=pit->first_content; delete; delete = delete->next_content )
    {
      if ( ( delete->pIndexData->vnum == obj->pIndexData->vnum ) &&
	delete != obj )
      {
       delete_cnt++;
       if (delete_cnt > 2 )
       {
         act(AT_PLAIN,"&RThe Pit Monster eats $p! &C*Burp*&w&W",ch,delete,NULL,TO_ROOM);
         act(AT_PLAIN,"&RThe Pit Monster eats $p! &C*Burp*&w&W",ch,delete,NULL,TO_CHAR);
         separate_obj(delete);
         obj_from_obj(delete);
         extract_obj(delete);
       }
      }
    }
   }
}

    /* Save our changes --GW */
    if ( IS_SET(ch->in_room->room_flags, ROOM_CLANSTOREROOM) )
        for ( clan = first_clan; clan; clan = clan->next )
          if ( clan->storeroom == ch->in_room->vnum )
            save_clan_storeroom(ch, clan);

return;
}