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      |				*
 * -----------------------------------------------------------|   \\._.//	*
 * SmaugWiz (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.    *
 * ------------------------------------------------------------------------ *
 *			    Area Interface file											*
 ****************************************************************************/

#ifndef	AREA_H
#define	AREA_H

// Defines for Area File versions.
#define		SM_V0				0		// Smaug 1.02a version files
#define		SM_V1				1		// Smaug 1.4
#define		SW_AV1				1000	// SmaugWizard 2.0
#define		SW_CURRENT_AV		SW_AV1	// SmaugWizard Current Area Version

// Defines for the LoadArea routine
#define		NOBOOT		FALSE
#define		BOOT		TRUE
#define		NOBUILD		FALSE
#define		BUILD		TRUE

// Area definition.
class CAreaData {
public:
				CAreaData (const char* Fname, const char* Aname, int Ver);
				~CAreaData ();

	const CString&	GetName () { return m_Name; }
	void			SetName (const char* n) { m_Name = n; }

	int		GetVersion () { return m_Version; }
	void	SetVersion (int v) { m_Version = v; }

	BOOL	Load (FILE *fp, int& LineCount);
	void	LoadFlags (FILE* fp);
	void	LoadRanges (FILE* fp);
	void	LoadEconomy (char* pLine);
	void	LoadMobiles (FILE* fp);
	void	LoadObjects (FILE* fp);
	void	LoadResets (FILE* fp);
	void	LoadRooms (FILE* fp);
	void	LoadShops (FILE* fp);
	void	LoadRepairs (FILE* fp);
	void	LoadSpecials (FILE* fp);
	void	Reset ();
	void	FixExits (BOOL bBoot = FALSE);

	int		GetFlags () { return flags; }
	BOOL	TestFlag (int bit) { return (flags & bit) != 0; }
	void	SetFlag (int bit) { flags |= bit; }
	void	ClrFlag (int bit) { flags &= ~bit; }

	BOOL	IsLoaded () { return (m_status & AREA_LOADED) != 0; }
	void	SetLoaded () { m_status |= AREA_LOADED; }
	void	ClrLoaded () { m_status &= ~AREA_LOADED; }

	BOOL	IsDeleted () { return (m_status & AREA_DELETED) != 0; }
	void	SetDeleted () { m_status |= AREA_DELETED; }
	void	ClrDeleted () { m_status &= ~AREA_DELETED; }

	BOOL	IsNoPkill () { return (flags & AFLAG_NOPKILL) != 0; }
	void	SetNoPkill () { flags |= AFLAG_NOPKILL; }
	void	ClrNoPkill () { flags &= ~AFLAG_NOPKILL; }

	BOOL	IsNoTeleport () { return (flags & AFLAG_NOTELEPORT) != 0; }
	void	SetNoTeleport () { flags |= AFLAG_NOTELEPORT; }
	void	ClrNoTeleport () { flags &= ~AFLAG_NOTELEPORT; }

	void	BoostEconomy (int gold);
	void	LowerEconomy (int gold);
	BOOL	CheckGold (int gold);

private:
	int			m_Version;
	short		m_status;
	int			flags;

public:
	short		age;
	short		nplayer;
	short		reset_frequency;
	int			low_r_vnum;
	int			hi_r_vnum;
	int			low_o_vnum;
	int			hi_o_vnum;
	int			low_m_vnum;
	int			hi_m_vnum;
	int			low_soft_range;
	int			hi_soft_range;
	int			low_hard_range;
	int			hi_hard_range;
	CResetData	*last_mob_reset;
	CResetData	*last_obj_reset;
	short		max_players;
	int			mkills;
	int			mdeaths;
	int			pkills;
	int			pdeaths;
	int			gold_looted;
	int			illegal_pk;
	int			high_economy;
	int			low_economy;			// last simple

	CString		m_Name;
	CString		m_Filename;
	CString		m_Author;
	CString		m_Resetmsg;
	CString		m_Climate;
	CPtrList	RoomList;
	CPtrList	MobList;
	CPtrList	m_ObjIdxList;
};


class CAreaList : public CPtrList {
public:

	CAreaData	*GetNext (POSITION& pos)
				{ return (CAreaData*) CPtrList::GetNext (pos); }

	CAreaData	*FindByFileName (const char* fname);
	CAreaData	*FindByName (const char* name);
	CAreaData	*FindByAuthor (const char* name);
	CAreaData	*RemoveTail ()
				{ return (CAreaData*) CPtrList::RemoveTail (); }

	void		Remove (CAreaData* pArea);
	void		RemoveAll ();

	// Delete an area and all its resources (rooms, mobs, objs, strings..)
	void		Delete (CAreaData* pArea);

	CPtrList	SortList;
};

extern CAreaList	AreaList, BuildList;
extern CPtrList		AllAreasList;

#ifdef SMAUGSERVER_CPP
	CAreaList	AreaList, BuildList;
	CPtrList	AllAreasList;
#endif


#endif