/**************************************************************************** * [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. * * ------------------------------------------------------------------------ * * Mobiles Interface file * ****************************************************************************/ #ifndef MOBILES_H #define MOBILES_H #include "ActFlags.h" #include "Affect.h" #include "Attack.h" #include "Defense.h" // Prototype for a mob. // This is the in-memory version of #MOBILES. #ifdef _DEBUG class CMobIndexData : public CObject { public: CMobIndexData (int v) { ClearAddrRange (&m_pNext, &saving_spell_staff, sizeof (saving_spell_staff)); vnum = v; } virtual void Dump (CDumpContext& dc) const; #else class CMobIndexData { public: CMobIndexData (int v) { ClearAddrRange (&m_pNext, &saving_spell_staff, sizeof (saving_spell_staff)); vnum = v; } #endif ~CMobIndexData (); CMobIndexData *GetNext () { return m_pNext; } void SetNext (CMobIndexData* n) { m_pNext = n; } void Clear (); void Read (FILE *fp); void Write (FILE* fp); void ReadPrograms (FILE *fp); char *GetPlayerName () { return m_pPlayerName; } void SetPlayerName (char* n) { m_pPlayerName = n; } char *GetShortDescr () { return m_pShortDescr; } void SetShortDescr (char* d) { m_pShortDescr = d; } char *GetLongDescr () { return m_pLongDescr; } void SetLongDescr (char* d) { m_pLongDescr = d; } char *GetDescription () { return m_pDescription; } void SetDescription (char* d) { m_pDescription = d; } WORD GetMobInvisLevel () { return m_MobInvisLevel; } void SetMobInvisLevel (WORD i) { m_MobInvisLevel = i; } void SetSex (int s) { sex = s; } void SetLevel (int l) { level = l; } BOOL IsPrototype () { return m_Act.IsPrototype (); } void ClrPrototype () { m_Act.ClrPrototype (); } void SetPrototype () { m_Act.SetPrototype (); } const CActFlags& GetActFlags () { return m_Act; } const CAffectFlags& GetAffectFlags () { return m_Affected; } const CAttackFlags& GetAttackFlags () { return m_Attacks; } const CDefenseFlags& GetDefenseFlags () { return m_Defenses; } void SetActFlags (const CActFlags& f) { m_Act = f; } void SetAffectFlags (const CAffectFlags& f) { m_Affected = f; } void SetAttackFlags (const CAttackFlags& f) { m_Attacks = f; } void SetDefenseFlags (const CDefenseFlags& f) { m_Defenses = f; } void SetNpc () { m_Act.SetNpc (); } BOOL IsComplex () { return m_bComplex; } void SetComplex (BOOL f = TRUE) { m_bComplex = f; } // Access functions for Languages const CBitVector& GetSpeaksFlags () { return m_Speaks; } void SetSpeaksFlags (const CBitVector& f) { m_Speaks = f; } int GetSpeaking () { return m_Speaking; } void SetSpeaking (int l) { m_Speaking = l; } BOOL SpeaksLanguage (int l) { return m_Speaks.IsSet (LANG_ALL) || m_Speaks.IsSet (l); } BOOL IsSpeaking (int l) { return m_Speaking == LANG_ALL || m_Speaking == l; } void SetSpeaks (int l) { m_Speaks.SetBit (l); } friend class CMobileTable; private: CMobIndexData *m_pNext; char *m_pPlayerName; char *m_pShortDescr; char *m_pLongDescr; char *m_pDescription; CAffectFlags m_Affected; CAttackFlags m_Attacks; CDefenseFlags m_Defenses; CBitVector m_Speaks; int m_Speaking; BOOL m_bComplex; CActFlags m_Act; WORD m_MobInvisLevel; public: int vnum; CBitVector m_Progtypes; CMobIndexData *next_sort; SPEC_FUN *spec_fun; CShopData *pShop; CRepairShopData *rShop; short count; short killed; short sex; short level; short alignment; short mobthac0; short ac; short hitnodice; short hitsizedice; short hitplus; short damnodice; short damsizedice; short damplus; short numattacks; int gold; int exp; int xflags; int resistant; int immune; int susceptible; short position; short defposition; short height; short weight; short race; short m_Class; short hitroll; short damroll; short perm_str; short perm_int; short perm_wis; short perm_dex; short perm_con; short perm_cha; short perm_lck; short saving_poison_death; short saving_wand; short saving_para_petri; short saving_breath; short saving_spell_staff; CPtrList MobPrgList; }; class CMobileTable { public: CMobileTable () { Empty (); } ~CMobileTable () { RemoveAll (); } int GetCount () { return m_Count; } int GetHash (int vnum) { return vnum % MAX_KEY_HASH; } CMobIndexData *GetFirstByHash (int hash) { ASSERT (hash >= 0 && hash < MAX_KEY_HASH); return m_mt [hash]; } CMobIndexData *GetFirst (int vnum) { return GetFirstByHash (GetHash (vnum)); } void SetFirst (int vnum, CMobIndexData* i) { m_mt [GetHash (vnum)] = i; } void Add (CMobIndexData *pIndex, int vnum); void Remove (CMobIndexData *pMob); CMobIndexData *GetMob (int vnum, BOOL bBug = FALSE); void Load (); void Save (); void Empty () { memset (this, 0, sizeof (CMobileTable)); } void RemoveAll (); private: int m_Count; CMobIndexData *m_mt [MAX_KEY_HASH]; }; #ifdef SMAUGSERVER_CPP CMobileTable MobTable; #endif extern CMobileTable MobTable; #endif