Пример #1
0
int main(int argc, char **argv)
{
	DIR *dir;
	struct dirent *dp;
	struct clan_array clans = CLAN_ARRAY_ZERO;
	char path[PATH_MAX];

	load_config();
	if (argc != 1) {
		fprintf(stderr, "usage: %s\n", argv[0]);
		return EXIT_FAILURE;
	}

	/* Build in memory the list of all clans with their members */
	sprintf(path, "%s/players", config.root);
	if (!(dir = opendir(path)))
		return perror(path), EXIT_FAILURE;
	while ((dp = readdir(dir))) {
		struct player player;
		struct clan *clan;

		if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
			continue;
		if (!read_player(&player, dp->d_name))
			continue;
		if (!(clan = get_clan(&clans, &player)))
			continue;
		if (!(add_member(clan, &player)))
			continue;
	}
	closedir(dir);

	write_clan_array(&clans);

	return EXIT_SUCCESS;
}
Пример #2
0
void do_clan (CHAR_DATA *ch, char *argument, int cmd)
{
	int					zone;
	int					leader_obj_vnum;
	int					member_obj_vnum;
	int					new_flags;
	int					clan_flags;
	int					num_clans = 0;
	int					i;
	NAME_SWITCH_DATA	*name_switch;
	NAME_SWITCH_DATA	*nsp;
	OBJ_DATA			*obj;
	CLAN_DATA			*clan;
	CLAN_DATA			*delete_clan;
	CHAR_DATA			*edit_mob = NULL;
	CHAR_DATA			*tch;
	char				*p;
	char				buf [MAX_STRING_LENGTH] = {'\0'};
	char				clan_name [MAX_STRING_LENGTH] = {'\0'};
	char				oldname [MAX_STRING_LENGTH] = {'\0'};
	char				newname [MAX_STRING_LENGTH] = {'\0'};
	char				literal [MAX_STRING_LENGTH] = {'\0'};
	char				name [MAX_STRING_LENGTH] = {'\0'};
	char				*the_clans [MAX_CLANS] = {'\0'};

	if ( IS_NPC (ch) ) {
		send_to_char ("Sorry, but you can't do this while switched...\n", ch);
		return;
	}

	if ( !*argument ) {

		send_to_char ("Old clan name   ->  New clan name\n", ch);
		send_to_char ("=============       =============\n", ch);

		if ( !clan_name_switch_list )
			send_to_char ("No clans set to be renamed.\n", ch);

		else {
			for ( nsp = clan_name_switch_list; nsp; nsp = nsp->next ) {
				snprintf (buf, MAX_STRING_LENGTH,  "%-15s     %-15s\n", nsp->old_name, nsp->new_name);
				send_to_char (buf, ch);
			}
		}

		send_to_char ("\nClan Name        Full Clan Name\n", ch);
		send_to_char ("===============  =================================\n",
					  ch);

		for ( clan = clan_list; clan; clan = clan->next ) {
			snprintf (buf, MAX_STRING_LENGTH,  "%-15s  %s\n", clan->name, clan->literal);
			send_to_char (buf, ch);

			if ( clan->zone ) {
				snprintf (buf, MAX_STRING_LENGTH,  "                 Enforcement Zone %d\n",
							  clan->zone);
				send_to_char (buf, ch);
			}

			if ( clan->member_vnum ) {
				obj = vtoo (clan->member_vnum);
				snprintf (buf, MAX_STRING_LENGTH,  "                 Member Object (%05d):  %s\n",
					clan->member_vnum,
					obj ? obj->short_description : "UNDEFINED");
				send_to_char (buf, ch);
			}

			if ( clan->leader_vnum ) {
				obj = vtoo (clan->leader_vnum);
				snprintf (buf, MAX_STRING_LENGTH,  "                 Leader Object (%05d):  %s\n",
					clan->leader_vnum,
					obj ? obj->short_description : "UNDEFINED");
				send_to_char (buf, ch);
			}
		}

		return;
	}

	argument = one_argument (argument, buf);

	if ( !*buf || *buf == '?' ) {
		send_to_char ("Syntax for modifying PCs:\n\n", ch);
		send_to_char ("   clan set <clan-name> [<clan-flags>]\n", ch);
		send_to_char ("   clan remove <clan-name>         (or all)\n", ch);
        send_to_char ("\nSyntax for modifying clan definitions:\n", ch);
		send_to_char ("   clan rename <oldclanname> <newclanname>\n", ch);
		send_to_char ("   clan unrename <oldclanname> <newclanname>\n", ch);
		send_to_char ("   clan register <name> <enforcement zone> <long name> "
					  "[<leader obj>] [<member obj>]\n", ch);
		send_to_char ("   clan unregister <name>\n", ch);
		send_to_char ("   clan list\n", ch);
		send_to_char ("\nThe obj vnums are optional.  Specify zone 0 if no "
					  "enforcement zone.\n\nExamples:\n", ch);
		send_to_char ("  > clan set tashalwatch member leader\n", ch);
		send_to_char ("  > clan remove tashalwatch\n", ch);
		send_to_char ("  > clan register TashalWatch 10 'Tashal Watch'\n", ch);
		send_to_char ("  > clan unregister tashalwatch\n", ch);
		send_to_char ("  > clan rename 10 TashalWatch\n", ch);
		send_to_char ("  > clan unrename 10 TashalWatch\n", ch);
		send_to_char ("  > clan list\n", ch);
		return;
	}

	if ( !str_cmp (buf, "list") ) {

		for ( tch = character_list; tch; tch = tch->next ) {

			if ( tch->deleted )
				continue;

			p = tch->clans;

			if ( !p || !*p )
				continue;

			while ( get_next_clan (&p, clan_name, &clan_flags) ) {

				if ( num_clans > MAX_CLANS )		/* Too many in list */
					break;

				for ( i = 0; i < num_clans; i++ )
					if ( !str_cmp (clan_name, the_clans [i]) )
						break;

				if ( i >= num_clans )
					the_clans [num_clans++] = str_dup (clan_name);
			}

		}

		*b_buf = '\0';

		for ( i = 0; i < num_clans; i++ ) {

			snprintf (b_buf + strlen(b_buf), MAX_STRING_LENGTH, "%-15s", the_clans [i]);

			if ( i % 5 == 4 )
				strcat (b_buf, "\n");
			else
				strcat (b_buf, " ");
		}

		page_string (ch->desc, b_buf);

		return;
	}

	if ( !str_cmp (buf, "set") ||
		 !str_cmp (buf, "remove") ||
		 !str_cmp (buf, "delete") ) {

		if ( (!ch->pc->edit_mob && !ch->pc->edit_player) ||
			(!(edit_mob = vtom (ch->pc->edit_mob)) &&
			!(edit_mob = ch->pc->edit_player)) ) {
			send_to_char ("Start by using the MOBILE command.\n", ch);
			return;
		}
	}

	if ( !str_cmp (buf, "set") ) {

		argument = one_argument (argument, clan_name);

		if ( !*clan_name ) {
			send_to_char ("Expected a clan name after 'add'.\n", ch);
			return;
		}

		new_flags = clan_flags_to_value (argument);

		if ( get_clan (edit_mob, clan_name, &clan_flags) )
			remove_clan (edit_mob, clan_name);

		clan_flags = 0;

		while ( 1 ) {

			argument = one_argument (argument, buf);

			if ( !*buf )
				break;

			if ( !str_cmp (buf, "member") )
				TOGGLE (clan_flags, CLAN_MEMBER)		/* {}'s define     */
			else if ( !str_cmp (buf, "leader") )        /* so no ; needed  */
				TOGGLE (clan_flags, CLAN_LEADER)
			else if ( !str_cmp (buf, "recruit") )
				TOGGLE (clan_flags, CLAN_RECRUIT)
			else if ( !str_cmp (buf, "private") )
				TOGGLE (clan_flags, CLAN_PRIVATE)
			else if ( !str_cmp (buf, "corporal") )
				TOGGLE (clan_flags, CLAN_CORPORAL)
			else if ( !str_cmp (buf, "sergeant") )
				TOGGLE (clan_flags, CLAN_SERGEANT)
			else if ( !str_cmp (buf, "lieutenant") )
				TOGGLE (clan_flags, CLAN_LIEUTENANT)
			else if ( !str_cmp (buf, "captain") )
				TOGGLE (clan_flags, CLAN_CAPTAIN)
			else if ( !str_cmp (buf, "general") )
				TOGGLE (clan_flags, CLAN_GENERAL)
			else if ( !str_cmp (buf, "commander") )
				TOGGLE (clan_flags, CLAN_COMMANDER)
			else if ( !str_cmp (buf, "apprentice") )
				TOGGLE (clan_flags, CLAN_APPRENTICE)
			else if ( !str_cmp (buf, "journeyman") )
				TOGGLE (clan_flags, CLAN_JOURNEYMAN)
			else if ( !str_cmp (buf, "master") )
				TOGGLE (clan_flags, CLAN_MASTER)
			else {
				snprintf (literal, MAX_STRING_LENGTH, "Flag %s is unknown for clans.\n", buf);
				send_to_char (literal, ch);
			}
		}
	
		if ( !clan_flags )
			clan_flags = CLAN_MEMBER;

		add_clan (edit_mob, clan_name, clan_flags);

		if ( edit_mob->mob ) {
			snprintf (buf, MAX_STRING_LENGTH,  "%d mobile(s) in world redefined.\n",
						  redefine_mobiles (edit_mob));
			send_to_char (buf, ch);
		}

		return;		/* Return from n/pc specific uses of clan */
	}
Пример #3
0
void do_castout (CHAR_DATA *ch, char *argument, int cmd)
{
	int			clan_flags = 0;
	int			clan_flags2 = 0;
	CHAR_DATA	*victim = NULL;
	CLAN_DATA	*clan = NULL;
	char		*p;
	char		clan_name [80];
	char		buf [MAX_STRING_LENGTH] = {'\0'};

	argument = one_argument (argument, buf);

	if ( !*buf ) {
		send_to_char ("Castout whom?\n\r", ch);
		return;
	}

	if ( !(victim = get_char_room_vis (ch, buf)) ) {
		send_to_char ("Nobody is here by that name.\n\r", ch);
		return;
	}

	argument = one_argument (argument, buf);

	p = ch->clans;

	if ( !*buf ) {
		if ( !get_next_leader (&p, clan_name, &clan_flags) ) {
			send_to_char ("You are not a leader in that clan.  You can't cast out anybody.\n", ch);
			return;
		}

		clan = get_clandef(clan_name);
		if ( !clan ) {
			send_to_char ("No such clan, I am afraid.\n", ch);
			return;
		}
		strcpy (clan_name, clan->name);
	}

	else if ( get_clan_long_short (ch, buf, &clan_flags) ) {
		if ( !IS_SET (clan_flags, CLAN_LEADER) && (clan_flags < CLAN_SERGEANT || clan_flags > CLAN_COMMANDER) && !IS_SET (clan_flags, CLAN_MASTER) ) {
			send_to_char ("You are not a leader in that clan.  You cannot cast anyone out.\n", ch);
			return;
		}

		clan = get_clandef_long(buf);
		if ( !clan ) {
			send_to_char ("No such clan, I am afraid.\n", ch);
			return;
		}
		strcpy (clan_name, clan->name);
	}

	else {
		send_to_char ("You are not a member of such a clan.\n", ch);
		return;
	}

	if ( !get_clan (victim, clan_name, &clan_flags2) ) {
		act ("$N is not part of your clan.\n", FALSE, ch, 0, victim, TO_CHAR);
		return;
	}

	if ( IS_SET (clan_flags, CLAN_LEADER) || clan_flags <= clan_flags2 ) {
		act ("You are not of sufficient rank to cast $N from the clan.\n",
				FALSE, ch, 0, victim, TO_CHAR | TO_ACT_FORMAT);
		return;
	}

	remove_clan (victim, clan_name);

	snprintf (buf, MAX_STRING_LENGTH,  "$N is no longer a part of %s.", clan->literal);
	act (buf, FALSE, ch, 0, victim, TO_CHAR);
	snprintf (buf, MAX_STRING_LENGTH,  "$n has stripped you of your clan membership in %s.", clan->literal);
	act (buf, FALSE, ch, 0, victim, TO_VICT | TO_ACT_FORMAT);
	snprintf (buf, MAX_STRING_LENGTH,  "$n has stripped $N of membership in %s.", clan->literal);
	act ("$n has stripped $N of clan membership.", FALSE, ch, 0, victim, TO_NOTVICT | TO_ACT_FORMAT);
}
Пример #4
0
void do_invite (CHAR_DATA *ch, char *argument, int cmd)
{
	int			clan_flags = 0;
	char		*p = NULL;
	CHAR_DATA	*tch = NULL;
	CLAN_DATA	*clan = NULL;
	char		buf [MAX_STRING_LENGTH] = {'\0'};
	char		clan_name [MAX_STRING_LENGTH] = {'\0'};

	argument = one_argument (argument, buf);

	if ( !*buf ) {
		send_to_char ("Invite who?\n\r", ch);
		return;
	}

	if ( !(tch = get_char_room_vis (ch, buf)) ) {
		send_to_char ("Nobody is here by that name.\n", ch);
		return;
	}

	if ( tch == ch ) {
		send_to_char ("You can't invite yourself.\n", ch);
		return;
	}

	argument = one_argument (argument, buf);

	if ( !*buf ) {

		p = ch->clans;

		if ( !get_next_leader (&p, clan_name, &clan_flags) ) {
			send_to_char ("You are not an initiated leader of any clan.\n", ch);
			return;
		}

		if ( (clan = get_clandef (clan_name)) ) {
			send_to_char ("That clan could not be found in the database.\n", ch);
			return;
		}

		strcpy (buf, clan->name);
	}

	else {
		if ( !get_clan_long_short (ch, buf, &clan_flags) ) {
			send_to_char ("You are not a member of such a clan.\n", ch);
			return;
		}

		if ( !IS_SET (clan_flags, CLAN_LEADER) && (clan_flags < CLAN_CORPORAL || clan_flags > CLAN_COMMANDER) && !IS_SET (clan_flags, CLAN_MASTER) ) {
			send_to_char ("You are not a leader of that clan.\n", ch);
			return;
		}

			/* Keep clan_name as the short name */

		if ( (clan = get_clandef_long (buf)) )
			strcpy (buf, clan->name);
	}

	if ( get_clan (tch, buf, &clan_flags) ) {
		act ("$N is already a clan member.", FALSE, ch, 0, tch, TO_CHAR);
		return;
	}

	if ( tch->delay || tch->fighting ) {
		act ("$N is busy right now.", FALSE, ch, 0, tch, TO_CHAR);
		return;
	}

	if ( !AWAKE (tch) ) {
		act ("$N isn't conscious right now.", FALSE, ch, 0, tch, TO_CHAR);
		return;
	}

	clan = get_clandef (buf);

	tch->delay = IS_NPC (tch) && !tch->desc ? 3 : 120;
	tch->delay_type = DEL_INVITE;
	tch->delay_ch = ch;
	tch->delay_who = str_dup (buf);

	snprintf (buf, MAX_STRING_LENGTH,  "You invite $N to join %s.",
				  clan ? clan->literal : clan_name);

	act (buf, FALSE, ch, 0, tch, TO_CHAR);

	snprintf (buf, MAX_STRING_LENGTH,  "$N invites you to join %s.",
				  clan ? clan->literal : clan_name);

	act (buf, FALSE, tch, 0, ch, TO_CHAR);

    act ("$N whispers something to $n about joining a clan.",
						FALSE, tch, 0, ch, TO_NOTVICT | TO_ACT_FORMAT);

}
Пример #5
0
void do_bank_clan(Character *ch, char *argument)
{
    char arg1[MAX_INPUT_LENGTH];
    char arg2[MAX_INPUT_LENGTH];
    arg1[0] = '\0';
    arg2[0] = '\0';
    long amount;

    argument = one_argument( argument, arg1 );
    argument = one_argument( argument, arg2 );
    if (!IS_CLANNED(ch) && !IS_IMMORTAL(ch))
    {
	send_to_char("You are not in a clan.\n\r",ch);
	return;
    }

    if (IS_IMMORTAL(ch))
    {
	CLAN_DATA *clan;
	int debit;

	if ((clan = get_clan(arg1)) == NULL)
	{
	    send_to_char("Syntax: bank clan <clan name> <amount to withdraw (in k)>\n\r",ch);
	    return;
	}

	if ((debit = atoi(arg2)) <= 0)
	{
	    send_to_char("Syntax: bank clan <clan name> <amount to withdraw (in k)>\n\r",ch);
	    return;
	}

	if (clan->money < debit * 100000)
	{
	    send_to_char("The clan doesn't have that much money!\n\r",ch);
	    return;
	}

	clan->money -= debit * 100000;
	ch->gold += debit * 1000;
	append_file( ch, UPGRADE_FILE, argument ); 
	save_clan(clan);
	return;
    }
    else
    {
	if (str_cmp(ch->pcdata->clan->leader, ch->getName() ))
	{
	    send_to_char("Only your clan leader may access the clan account.\n\r", ch);
	    return;
	}

	if (arg2[0] == '\0' || (str_cmp(arg2, "gold") && str_cmp(arg2, "silver")))
	{
	    send_to_char("Syntax: bank clan (+/- amount) (gold/silver)\n\r",ch);
	    return;
	}

	if (!str_cmp(arg2, "gold"))
	    amount = atoi(arg1) * 100;
	else
	    amount = atoi(arg1);

	if ( amount == 0 )
	{
	    send_to_char("Nothing much happens.\n\r", ch);
	    return;
	}

	if ( amount < 0 && amount * -1 > ch->pcdata->clan->money )
	{
	    send_to_char("You cannot withdraw more than your clan has.\n\r", ch);
	    return;
	}

	if ((ch->gold * 100) + ch->silver < amount && amount > 0)
	{
	    send_to_char("You cannot afford to deposit that much.\n\r",ch);
	    return;
	}

	if (amount > 0)
	{
	    if (ch->silver < amount)
	    {
	        ch->gold -= ((amount - ch->silver + 99) / 100);
	        ch->silver -= amount - (100 * ((amount - ch->silver + 99) / 100));
	    }
	    else
		ch->silver -= amount;

	}
	
	ch->pcdata->clan->money += amount;
	save_clan(ch->pcdata->clan);

	if ( amount < 0 )
	{
	    amount = amount * -1;

	    ch->gold += amount / 100;
	    ch->silver += amount - (amount / 100);

	    send_to_char("You withdraw from your clan fund.\n\r",ch);
	    return;
	}
	else
	{
	    send_to_char("You add to your clan fund.\n\r",ch);
	    return;
	}
    }
}
Пример #6
0
void fread_pfile( FILE * fp, time_t tdiff, char *fname, bool count )
{
   char *word;
   char *name = NULL;
   char *clan = NULL;
   short level = 0;
   short file_ver = 0;
   int pact2;
   bool fMatch;
   ROOM_INDEX_DATA *plr_home;
   char homebuf[MSL];

   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( "Act2", pact2, fread_number( fp ) );
            break;

         case 'C':
            KEY( "Clan", clan, fread_string( fp ) );
            break;

         case 'E':
            if( !strcmp( word, "End" ) )
               goto timecheck;
            break;

         case 'T':
            KEY( "Toplevel", level, fread_number( fp ) );
            break;

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

		 case 'P':
            if ( !str_cmp( word, "PlrHome" ) )
            {
                plr_home = get_room_index( fread_number( fp ) );
                break;
            }
			break;

         case 'V':
            KEY( "Version", file_ver, fread_number( fp ) );
            break;
      }

      if( !fMatch )
         fread_to_eol( fp );
   }

 timecheck:

   if( count == FALSE && !IS_SET( pact2, ACT_EXEMPT ) )
   {
      if( (level < 10) && (tdiff > sysdata.newbie_purge) )
      {
         if( unlink( fname ) == -1 )
            perror( "Unlink" );
         else
         {
           sprintf( homebuf, "%s%c/%s.home", PLAYER_DIR, tolower(name[0]), name);

			if ( !remove(homebuf) )
			{
			   STRFREE( plr_home->name );
			   plr_home->name = STRALLOC( "An Empty Apartment" );
			   REMOVE_BIT( plr_home->room_flags , ROOM_PLR_HOME );
			   SET_BIT( plr_home->room_flags , ROOM_EMPTY_HOME );
			   fold_area( plr_home->area, plr_home->area->filename, FALSE );
			}

			 days = sysdata.newbie_purge;
            sprintf( log_buf, "Player %s was deleted. Exceeded time limit of %d days.", name, days );
            log_string( log_buf );
#ifdef AUTO_AUTH
            remove_from_auth( name );
#endif
            deleted++;
         }
      }

     if( (level < LEVEL_IMMORTAL) && (tdiff > sysdata.regular_purge) )
      {
         if( level < LEVEL_IMMORTAL )
         {
            if( unlink( fname ) == -1 )
               perror( "Unlink" );
            else
            {
              sprintf( homebuf, "%s%c/%s.home", PLAYER_DIR, tolower(name[0]), name);

			  if ( !remove(homebuf) )
			  {
			    STRFREE( plr_home->name );
			    plr_home->name = STRALLOC( "An Empty Apartment" );
			    REMOVE_BIT( plr_home->room_flags , ROOM_PLR_HOME );
			    SET_BIT( plr_home->room_flags , ROOM_EMPTY_HOME );
			    fold_area( plr_home->area, plr_home->area->filename, FALSE );
			  }
               days = sysdata.regular_purge;
               sprintf( log_buf, "Player %s was deleted. Exceeded time limit of %d days.", name, days );
               log_string( log_buf );
#ifdef AUTO_AUTH
               remove_from_auth( name );
#endif
               deleted++;
            }
         }
      }
   }

   if( clan != NULL )
   {
      CLAN_DATA *guild = get_clan( clan );

      if( guild )
         guild->members++;
   }

   if( name )
     STRFREE(name);
   if( clan )
     STRFREE(clan);

   return;
}
Пример #7
0
void fread_pfile( FILE * fp, time_t tdiff, char *fname, bool count )
{
   const char *word;
   char *name = NULL;
   char *clan = NULL;
   char *deity = NULL;
   short level = 0;
   short file_ver = 0;
   EXT_BV pact;
   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 'A':
            KEY( "Act", pact, fread_bitvector( fp ) );
            break;

         case 'C':
            KEY( "Clan", clan, fread_string( fp ) );
            break;

         case 'D':
            KEY( "Deity", deity, fread_string( fp ) );
            break;

         case 'E':
            if( !strcmp( word, "End" ) )
               goto timecheck;
            break;

         case 'L':
            KEY( "Level", level, fread_number( fp ) );
            break;

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

         case 'V':
            KEY( "Version", file_ver, fread_number( fp ) );
            break;
      }

      if( !fMatch )
         fread_to_eol( fp );
   }

 timecheck:

   if( count == FALSE && !xIS_SET( pact, PLR_EXEMPT ) )
   {
      if( level < 10 && tdiff > sysdata.newbie_purge )
      {
         if( unlink( fname ) == -1 )
            perror( "Unlink" );
         else
         {
            days = sysdata.newbie_purge;
            snprintf( log_buf, MAX_STRING_LENGTH, "Player %s was deleted. Exceeded time limit of %d days.", name, days );
            log_string( log_buf );
#ifdef AUTO_AUTH
            remove_from_auth( name );
#endif
            deleted++;
            return;
         }
      }

      if( level < LEVEL_IMMORTAL && tdiff > sysdata.regular_purge )
      {
         if( level < LEVEL_IMMORTAL )
         {
            if( unlink( fname ) == -1 )
               perror( "Unlink" );
            else
            {
               days = sysdata.regular_purge;
               snprintf( log_buf, MAX_STRING_LENGTH, "Player %s was deleted. Exceeded time limit of %d days.", name, days );
               log_string( log_buf );
#ifdef AUTO_AUTH
               remove_from_auth( name );
#endif
               deleted++;
               return;
            }
         }
      }
   }

   if( clan != NULL )
   {
      CLAN_DATA *guild = get_clan( clan );

      if( guild )
         guild->members++;
   }

   if( deity != NULL )
   {
      DEITY_DATA *god = get_deity( deity );

      if( god )
         god->worshippers++;
   }

   if( clan )
      STRFREE( clan );
   if( name )
      STRFREE( name );
   if( deity )
      STRFREE( deity );

   return;
}