mud++0.35/etc/
mud++0.35/etc/guilds/
mud++0.35/help/propert/
mud++0.35/mudC/
mud++0.35/player/
mud++0.35/src/interface/
mud++0.35/src/os/cygwin32/
mud++0.35/src/os/win32/
mud++0.35/src/os/win32/bcppbuilder/
mud++0.35/src/osaddon/
mud++0.35/src/util/
/*
....[@@@..[@@@..............[@.................. 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