/*
....[@@@..[@@@..............[@.................. MUD++ is a written from
....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and
....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++.
....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing
....[@......[@..[@@@@@..[@@@@@.................. development project.  All 
................................................ contributions are welcome. 
....Copyright(C).1995.Melvin.Smith.............. Enjoy. 
------------------------------------------------------------------------------
Melvin Smith (aka Fusion)         msmith@falcon.mercer.peachnet.edu 
MUD++ development mailing list    mudpp-list@spice.com
------------------------------------------------------------------------------
npc.h
*/

#ifndef _NPC_H
#define _NPC_H

#include "char.h"

extern const bitType npc_bit_list[];

const int NPC_UNDEFINED		= 0;  // Dont use !
const int NPC_UNUSED1		= 1;
const int NPC_WIMPY			= 2;
const int NPC_AGGRESSIVE	= 3;
const int NPC_SENTINEL		= 4;
const int NPC_STAY_ZONE		= 5;
const int NPC_SCAVENGER		= 6;
const int NPC_FRIENDLY		= 7;
const int NPC_TAME			= 8;
const int NPC_CHARMED		= 9;
const int NPC_BANKER		= 10; 
const int NPC_TRAINER		= 11;
const int NPC_PRACTICER		= 12;

const int MAX_NPC_BIT_FIELDS	= 1;

class NPC : public Char
{
	protected:
		//Index index;
		unsigned long npc_bits[ 1 ];
		Repop *repop;

	public:
		NPC()
		:	repop(0)
		{
			memset( npc_bits, 0, sizeof( npc_bits[0] ) * 1 );
		}

		NPC( const NPC & x )
		:	Char( x ),   // propagate up the hierarchy
			repop(0)
		{
			memcpy( (void *)npc_bits, (void *)x.npc_bits,
								sizeof( npc_bits[0] ) * MAX_NPC_BIT_FIELDS );
		}

		virtual ~NPC();
 
		bool isNPC() { return true; }

		void out( const char * );
		void out( const String & x ) { NPC::out( x.chars() ); }

		virtual void pulse();
		void fromWorld();
		void toWorld();
//		const Index & getIndex() const { return index; }
//		void setIndex( const Index & x ) { index = x; }
//		void setIndexScope( const String & x ) { index.setScope( x ); }
//		void setIndexKey( const String & x ) { index.setKey( x ); }
//		const String getIndexScope() const { return index.getScope(); }
//		const String getIndexKey() const { return index.getKey(); }

		void setRepop( Repop * x ) { repop = x; }
		Repop * getRepop() { return repop; }

		int readProtoFrom( InFile &in ) {}
		int writeProtoTo( OutFile &out ) const {}
		int readFrom( InFile &in );
		int writeTo( OutFile &out ) const;
		virtual void look( Object * );
		virtual void look( Char * );
};
#endif