/* ....[@@@..[@@@..............[@.................. 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 ------------------------------------------------------------------------------ mudobj.h */ #ifndef _MUDOBJ_H #define _MUDOBJ_H #include "llist.h" #include "action.h" #include "bit.h" #include "string.h" #include "trigs.h" #include "vmobject.h" class Action; class Affect; class Modifier; const int MAX_AFFECT_BIT_FIELDS = 1; class MudObject : public VMObject { protected: unsigned long aff_bits[MAX_AFFECT_BIT_FIELDS]; unsigned long trigger_bits[ MAX_NEWTRIG_BIT_FIELDS ]; public: LList<Affect> aff_list; LList<Action> o_list; LList<Action> t_list; // this is for trigger actions // and command actions // doing is the pointer to what // the char is doing LList<struct TriggerData> triggers; MudObject() { memset( aff_bits, 0, sizeof( aff_bits[0] * MAX_AFFECT_BIT_FIELDS ) ); memset( trigger_bits, 0, sizeof( trigger_bits[0] ) * MAX_NEWTRIG_BIT_FIELDS ); } MudObject( const MudObject & x ) { // Copy the aff_list. // Still uncertain about how I want to do this so right // now only copy the bit field. memcpy( aff_bits, x.aff_bits, sizeof( aff_bits[0] * MAX_AFFECT_BIT_FIELDS ) ); memcpy( trigger_bits, x.trigger_bits, sizeof( trigger_bits[0] ) * MAX_NEWTRIG_BIT_FIELDS ); triggers.copy( x.triggers ); } virtual ~MudObject(); virtual vmtype getVMType() { return VMT_MUDOBJECT; } virtual bool isThing() const { return false; } virtual bool isRoom() const { return false; } virtual bool isChar() const { return false; } virtual bool isObject() const { return false; } virtual bool isPC() const { return false; } virtual bool isNPC() const { return false; } virtual bool isShopKeeper() const { return false; } virtual bool affectedBy( int x ) { return IS_SET(aff_bits, x); } virtual void addAffect( Affect * ); virtual void rmAffect( int ); virtual Affect * getAffect( int ); virtual void modify( Modifier *, bool ) {} virtual void out( const char * ) {} virtual void out( const String & ) {} virtual void * findTrigger( int ); virtual void extract() {} virtual void fromWorld() {} virtual void toWorld() {} inline void addTrigger( struct TriggerData * td ) { triggers.add(td); SET_BIT( trigger_bits, td->type); } inline void removeTrigger( struct TriggerData * td ) { triggers.remove(td); CLR_BIT( trigger_bits, td->type); } }; #endif