/* ....[@@@..[@@@..............[@.................. 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@hom.net MUD++ development mailing list mudpp@van.ml.org ------------------------------------------------------------------------------ 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; inline int getNPCBit( const String & x ) { return lookupBit( npc_bit_list, x ); } inline const char * getNPCBitName( int x ) { return lookupBitName( npc_bit_list, x ); } class NPC : public Char { private: static int total_count; protected: //Index index; unsigned long npc_bits[ MAX_NPC_BIT_FIELDS ]; Repop *repop; public: NPC() : repop(0) { total_count++; memset( npc_bits, 0, sizeof( npc_bits[0] ) * MAX_NPC_BIT_FIELDS ); } NPC( const NPC & x ) : Char( x ), // propagate up the hierarchy repop(0) { total_count++; memcpy( (void *)npc_bits, (void *)x.npc_bits, sizeof( npc_bits[0] ) * MAX_NPC_BIT_FIELDS ); } virtual ~NPC(); virtual vmtype getVMType() { return VMT_NPC; } bool isNPC() const { return true; } void setNPCBit( int x ) { SET_BIT( npc_bits, x ); } void clrNPCBit( int x ) { CLR_BIT( npc_bits, x ); } void toggleNPCBit( int x ) { TOGGLE_BIT( npc_bits, x ); } bool NPCBitSet( int x ) { return IS_SET( npc_bits, x ); } void out( const char * ); void out( const String & x ) { NPC::out( x.chars() ); } virtual bool pulse(); void extract(); void fromWorld(); void toWorld(); void setRepop( Repop * x ) { repop = x; } Repop * getRepop() { return repop; } void readFrom_mainblock( StaticInput & ); virtual bool readFrom_optionalblock( StaticInput & ); int readFrom( StaticInput & ); void writeTo_mainblock( Output & ) const; virtual void writeTo_optionalblock( Output & ) const; int writeTo( Output & ) const; void say( const String & ) {} void look( Object * ); void look( Char * ); void makeCorpse(); virtual void describeItself( String &); static int getTotalCount() { return total_count; } }; extern LList<NPC> npcs; inline void NPC::fromWorld() { npcs.remove( this ); } inline void NPC::toWorld() { npcs.add( this ); } #endif