SmaugWizard/Backup/
SmaugWizard/Backup/L/
SmaugWizard/Boards/
SmaugWizard/Building/
SmaugWizard/Corpses/
SmaugWizard/Councils/
SmaugWizard/Deity/
SmaugWizard/Gods/
SmaugWizard/MudProgs/
SmaugWizard/Player/L/
SmaugWizard/Src/
SmaugWizard/Src/res/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |				*
 * -----------------------------------------------------------|   \\._.//	*
 * SmaugWizard (C) 1998 by Russ Pillsbury (Windows NT version)|   (0...0)	*
 * -----------------------------------------------------------|    ).:.(	*
 * SMAUG (C) 1994, 1995, 1996 by Derek Snider                 |    {o o}	*
 * -----------------------------------------------------------|   / ' ' \	*
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |~'~.VxvxV.~'~*
 * Scryn, Swordbearer, Rennard, Tricops, and Gorog.           |				*
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, and Katja Nyboe.    *
 * ------------------------------------------------------------------------ *
 *			    Clans header file											*
 ****************************************************************************/

#ifndef		CLAN_H
#define		CLAN_H

enum ClanTypes { CLAN_PLAIN, CLAN_VAMPIRE, CLAN_WARRIOR, CLAN_DRUID,
				  CLAN_MAGE, CLAN_CELTIC, CLAN_THIEF, CLAN_CLERIC,
				  CLAN_UNDEAD, CLAN_CHAOTIC, CLAN_NEUTRAL, CLAN_LAWFUL,
				  CLAN_NOKILL, CLAN_ORDER, CLAN_GUILD,
				  CLAN_ALL };

class CClanData {
public:
			CClanData () { Clear (); }
			CClanData (const char* name, const char* fname, ClanTypes type);
			~CClanData ();

	void		Clear () { memset (this, 0, sizeof (CClanData)); }
	void		Read (FILE *fp);
	void		Save ();
	void		SaveStoreroom (CCharacter *ch);

	char		*GetName () { return m_pName; }
	void		SetName (const char* n) { m_pName = STRALLOC (n); }
	const char	*GetDescription () { return m_pDescription; }
	void		SetDescription (const char* n)
				{ STRFREE (m_pDescription); m_pDescription = STRALLOC (n); }
	char		*GetFilename () { return m_pFilename; }
	void		SetFilename (const char* n) { m_pFilename = str_dup (n); }
	ClanTypes	GetType () { return m_Type; }
	void		SetType (ClanTypes t) { m_Type = t; }
	short		GetMembers () { return m_Members; }
	void		SetMembers (short n) { m_Members = n; }
	void		AddMembers (short n) { m_Members = max (0, m_Members + n); }

private:
	char		*m_pFilename;	// Clan filename
	char		*m_pName;		// Clan name
	ClanTypes	m_Type;			// See clan type defines
	char		*m_pDescription;	// A brief description of the clan

public:
	char		*motto;			// Clan motto
	char		*deity;			// Clan's deity
	char		*leader;		// Head clan leader
	char		*number1;		// First officer
	char		*number2;		// Second officer
	int			pkills;			// Number of pkills on behalf of clan
	int			pdeaths;		// Number of pkills against clan
	int			mkills;			// Number of mkills on behalf of clan
	int			mdeaths;		// Number of clan deaths due to mobs
	int			illegal_pk;		// Number of illegal pk's by clan
	int			score;			// Overall score
	short		favour;			// Deities favour upon the clan
	short		strikes;		// Number of strikes against the clan
	short		m_Members;		// Number of clan members
	short		alignment;		// Clan's general alignment
	int			board;			// Vnum of clan board
	int			clanobj1;		// Vnum of first clan obj (ring)
	int			clanobj2;		// Vnum of second clan obj (shield)
	int			clanobj3;		// Vnum of third clan obj (weapon)
	int			recall;			// Vnum of clan's recall room
	int			storeroom;		// Vnum of clan's store room
	int			guard1;			// Vnum of clan guard type 1
	int			guard2;			// Vnum of clan guard type 2
	int			m_Class;		// For guilds
};



class CClanList : public CPtrList {
public:
	char*		GetTypeName (ClanTypes type);
	CClanData*	Find (const char *name, ClanTypes type);
	void		Write ();

	CClanData*	GetNext (POSITION& pos)
				{ return (CClanData*) CPtrList::GetNext (pos); }
	void		Remove (CClanData* clan);
	void		RemoveAll ();
};


#ifdef	SMAUGSERVER_CPP
	CClanList	ClanList;
#endif

extern CClanList	ClanList;

#endif