/****************************************************************************
* [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | *
* -----------------------------------------------------------| \\._.// *
* SmaugWizard (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. *
* ------------------------------------------------------------------------ *
* Language Class Interface file *
***************************************************************************/
#ifndef LANGUAGE_H
#define LANGUAGE_H
#define CurrentLanguageFileVersion 1000
// These are the only fixed language definitions
#define LANG_ALL 0 // duplicated in Smaug.h
#define LANG_COMMON 1
// These languages are the default languages that will be used if no
// language file is found, and the names below are used when setting
// up the default list. But the enums are commented out to eliminate
// the chance that someone will accidentally use them (which would
// cause problems).
//enum LanguageTypes {
// LANG_ALL, LANG_COMMON, LANG_ELVEN, LANG_DWARVEN, LANG_PIXIE, LANG_OGRE,
// LANG_ORCISH, LANG_TROLLISH, LANG_RODENT, LANG_INSECTOID,
// LANG_MAMMAL, LANG_REPTILE, LANG_DRAGON, LANG_SPIRITUAL,
// LANG_MAGICAL, LANG_GOBLIN, LANG_GOD, LANG_ANCIENT,
// LANG_HALFLING, LANG_CLAN, LANG_GITH, MAX_LANGUAGE };
#define MAX_LANGUAGE 21
#ifdef SMAUGSERVER_CPP
const char *LanguageNames [MAX_LANGUAGE] = {
"all", "common", "elvish", "dwarven", "pixie", "ogre",
"orcish", "trollese", "rodent", "insectoid",
"mammal", "reptile", "dragon", "spiritual",
"magical", "goblin", "god", "ancient",
"halfling", "clan", "gith" };
#endif
extern const char *LanguageNames [MAX_LANGUAGE];
#define VALID_LANGS (LANG_COMMON | LANG_ELVEN | LANG_DWARVEN \
| LANG_PIXIE | LANG_OGRE | LANG_ORCISH \
| LANG_TROLLISH | LANG_GOBLIN | LANG_HALFLING \
| LANG_GITH)
// 18 Languages
class CLanguage {
public:
CLanguage (int lang, const char* n, BOOL learn = TRUE)
{ m_nLanguage = lang; m_Name = n; m_bLearn = learn; }
BOOL Read (FILE* fp);
void Write ();
BOOL HasName () { return ! m_Name.IsEmpty (); }
void SetName (const char* n) { m_Name = n; }
const CString& GetName () { return m_Name; }
int GetLanguage () { return m_nLanguage; }
BOOL CanLearn () { return m_bLearn; }
friend class CLanguageTable;
protected:
int m_nLanguage;
BOOL m_bLearn;
CString m_Name; // Language name
};
class CLanguageTable : public CPtrList {
public:
void Load ();
void Save ();
int GetCurrentVersion () { return CurrentLanguageFileVersion; }
BOOL IsValidLanguage (int l) { return l > 0 && l < GetCount (); }
int GetCommon () { return m_Common; }
int GetClan () { return m_Clan; }
void Add (CLanguage* pLa) { AddTail (pLa); }
BOOL LoadLanguageFile (const char *fname);
int GetLanguage (const char* name);
void LoadFromString (CBitVector& Bv, char* s);
CLanguage *GetNext (POSITION& pos)
{ return (CLanguage*) CPtrList::GetNext (pos); }
CLanguage *GetLanguageData (int l)
{ if (l < 0 || l > GetCount ()) return NULL;
else return (CLanguage*) GetAt (FindIndex (l)); }
const CString& GetName (int l) { return GetLanguageData (l)->m_Name; }
BOOL HasName (int l) { return GetLanguageData (l)->HasName (); }
CLanguage *Find (const char* prefix);
CLanguage *RemoveTail () { return (CLanguage*) CPtrList::RemoveTail (); }
void SetFromString (char*& pLine, CBitVector& Bv);
CString PrintAssigned (const CBitVector& Bv);
void RemoveAll ();
private:
int m_Common, m_Clan;
};
#ifdef SMAUGSERVER_CPP
CLanguageTable LanguageTable;
#endif
extern CLanguageTable LanguageTable;
#endif