/****************************************************************************
* [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. *
* ------------------------------------------------------------------------ *
* Skills Interface file *
****************************************************************************/
#ifndef CLASS_H
#define CLASS_H
#define CurrentClassFileVersion 1000
enum NpcClass { NPC_MAGE, NPC_CLERIC, NPC_THIEF, NPC_WARRIOR, NPC_VAMPIRE,
NPC_DRUID, NPC_RANGER, NPC_AUGURER, NPC_PC8, NPC_PC9,
NPC_PC10, NPC_PC11, NPC_PC12, NPC_PC13, NPC_PC14,
NPC_PC15, NPC_PC16, NPC_PC17, NPC_PC18, NPC_PC19,
NPC_BAKER, NPC_BUTCHER,NPC_BLACKSMITH, NPC_MAYOR,NPC_KING,
NPC_QUEEN, MAX_NPC_CLASS };
#ifdef SMAUGSERVER_CPP
const char* NpcClassNames [MAX_NPC_CLASS] =
{
"mage", "cleric", "thief", "warrior", "vampire", "druid", "ranger",
"augurer", "pc8", "pc9", "pc10", "pc11", "pc12", "pc13", "pc14", "pc15",
"pc16", "pc17", "pc18", "pc19",
"baker", "butcher", "blacksmith", "mayor", "king", "queen"
};
#endif
extern const char *NpcClassNames [MAX_NPC_CLASS];
// Per-class stuff.
class CClassData {
public:
CClassData () { memset (this, 0, sizeof (CClassData)); }
~CClassData ();
int GetCurrentVersion () { return CurrentClassFileVersion; }
BOOL Read (FILE* fp);
void Write ();
char *GetName () { return m_pName; }
void SetName (const char* n) { m_pName = STRALLOC (n); }
int GetClass () { return m_Class; }
int GetAttrPrime () { return m_AttrPrime; }
void SetAttrPrime (int a) { m_AttrPrime = a; }
int GetWeapon () { return m_Weapon; }
void SetWeapon (int w) { m_Weapon = w; }
int GetGuild () { return m_Guild; }
void SetGuild (int g) { m_Guild = g; }
int GetSkillAdept () { return m_SkillAdept; }
int GetThac0 () { return m_Thac0_00; }
void SetThac0 (int t) { m_Thac0_00 = t; }
int GetThac32 () { return m_Thac0_32; }
void SetThac32 (int t) { m_Thac0_32 = t; }
int GetMinHp () { return m_HpMin; }
void SetMinHp (int h) { m_HpMin = h; }
int GetMaxHp () { return m_HpMax; }
void SetMaxHp (int h) { m_HpMax = h; }
BOOL HasManaGain () { return m_bManaGain; }
void SetManaGain (BOOL b) { m_bManaGain = b; }
int GetExpBase () { return m_ExpBase; }
void SetExpBase (int e) { m_ExpBase = e; }
BOOL CanMorph (const char* morph);
char *GetTitle (int lev, int sex) { return m_Titles [lev][sex]; }
void SetTitle (int lev, int sex, const char* tit)
{ delete m_Titles [lev][sex]; m_Titles [lev][sex] = str_dup (tit); }
friend class CClassTable;
protected:
char *m_pName; // Class Name
int m_Class; // Assigned class number
int m_AttrPrime; // Prime attribute
int m_Weapon; // First weapon
int m_Guild; // Vnum of guild room
int m_SkillAdept; // Maximum skill level
int m_Thac0_00; // Thac0 for level 0
int m_Thac0_32; // Thac0 for level 32
int m_HpMin; // Min hp gained on leveling
int m_HpMax; // Max hp gained on leveling
BOOL m_bManaGain; // Class gains mana on level
int m_ExpBase; // Class base exp
int m_SDPercent; // Shove/Drag percentage
char *m_Titles [MAX_LEVEL+1][2];
};
#define GCD GetClassData(c)
class CClassTable : public CPtrList {
public:
void Load ();
void Save ();
BOOL IsValidClass (int c) { return c >= 0 && c < GetCount (); }
BOOL LoadClassFile (const char *fname);
void Add (CClassData* pCl) { AddTail (pCl); }
CClassData *GetNext (POSITION& pos)
{ return (CClassData*) CPtrList::GetNext (pos); }
CClassData *RemoveTail () { return (CClassData*) CPtrList::RemoveTail (); }
CClassData *GetClassData (int c) // Get CClassData pointer from class number
{ if (c < 0 || c > GetCount ()) c = 0;
return (CClassData*) GetAt (FindIndex (c)); }
CClassData *Find (const char* name);
char *GetName (int c) { return GCD->m_pName; }
void ListClasses (CCharacter *ch);
int GetClass (const char* name);
int GetSkillAdept (int c) { return GCD->m_SkillAdept; }
int GetAttrPrime (int c) { return GCD->m_AttrPrime; }
char *GetTitle (int c, int lev, int sex)
{ return GCD->m_Titles [lev][sex]; }
int GetThac0 (int c) { return GCD->GetThac0 (); }
int GetThac32 (int c) { return GCD->GetThac32 (); }
int GetExpBase (int c) { return GCD->GetExpBase (); }
int GetShoveDragPercent (int c) { return GCD->m_SDPercent; }
BOOL HasManaGain (int c) { return GCD->m_bManaGain; }
BOOL CanMorph (int c, const char* mor) { return GCD->CanMorph (mor); }
BOOL IsVampire (int c)
{ return ! stricmp (GCD->m_pName, "Vampire"); }
void RemoveAll ();
NpcClass GetNpcClass (const char* name);
const char* GetNpcClassName (int r)
{ if (r >= 0 || r < MAX_NPC_CLASS) return NpcClassNames [r];
else return "none"; }
};
#ifdef SMAUGSERVER_CPP
CClassTable ClassTable;
#endif
extern CClassTable ClassTable;
#endif