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.    *
 * ------------------------------------------------------------------------ *
 *			    Resets Interface file										*
 ****************************************************************************/

#ifndef	RESETS_H
#define	RESETS_H

extern void	ResetRoom (CRoomIndexData* pRoom, CAreaData* pArea);


#ifdef SMAUGSERVER_CPP
	int		gResetCount;
#endif
extern	int	gResetCount;

// Reset commands:
//   '*': comment
//   'M': read a mobile
//   'O': read an object
//   'P': put object in object
//   'G': give object to mobile
//   'E': equip object to mobile
//   'H': hide an object
//   'B': set a bitvector
//   'T': trap an object
//   'D': set state of door
//   'R': randomize room exits
//   'S': stop (end of list)

// Area-reset definition.
class CResetData {
public:
				CResetData () { memset (this, 0, sizeof (CResetData)); }
				CResetData (char c, int ex, int m, int a1, int a2, int a3)
				{ command=c; extra=ex; mob=m, arg1=a1; arg2=a2; arg3=a3;
				  ++gResetCount; }

	char		command;
	int			extra;
	int			mob;
	int			arg1;
	int			arg2;
	int			arg3;
};


class CResetList : public CPtrList {
public:
				~CResetList () { RemoveAll (); }

	CResetData	*GetNext (POSITION& pos)
				{ m_CurPos = pos;
				  return (CResetData*) CPtrList::GetNext (pos); }

	CResetData	*GetPrev (POSITION& pos)
				{ m_CurPos = pos;
				  return (CResetData*) CPtrList::GetPrev (pos); }

	CResetData	*GetAt (POSITION& pos)
				{ return (CResetData*) CPtrList::GetAt (pos); }

	BOOL		FindPrevCommand (POSITION& pos, char c);

	void	Remove (CResetData* pReset)
			{ POSITION p = Find (pReset); RemoveAt (p);
			  delete pReset; --gResetCount; }

	void	RemoveAll ()
			{ while (!IsEmpty ()) delete (CResetData*) RemoveTail ();
			  CPtrList::RemoveAll (); }

	POSITION	GetCurPos () { return m_CurPos; }

private:
	POSITION	m_CurPos;
};

#endif