#ifndef _CHARACTER_CLASS_H_ #define _CHARACTER_CLASS_H_ #include // Àü¹æ ÂüÁ¶ struct CharacterDBData; struct ChState; class CClass { public: enum JobType { NONE_JOB = 0, // Àΰ£ ±âº»Å¬·¡½º Fighter = 1, Rogue = 2, Mage = 3, Acolyte = 4, // Àΰ£ 1stŬ·¡½º Defender = 5, Warrior = 6, Assassin = 7, Archer = 8, Sorcerer = 9, Enchanter = 10, Priest = 11, Cleric = 12, // ¾ÆÄ­ ±âº»Å¬·¡½º Combatant = 17, Officiator = 18, // ¾ÆÄ­ 1stŬ·¡½º Templar = 19, Attacker = 20, Gunner = 21, RuneOff = 22, LifeOff = 23, ShadowOff = 24, MAX_CLASS = 25 }; enum StatusType { NONE_STAT = 0, STR = 1, DEX = 2, CON = 3, INT = 4, WIS = 5, MAX_TYPE = 6 }; enum JobLevel { NONE_CLASS = 0, DEFAULT_CLASS = 1, JOB_CHANGE_1ST = 2 }; enum RaceType { HUMAN = 0, AKHAN = 1, MAX_RACE = 2 }; CClass(const JobType eJobType, const JobType ePrevJobType, const JobLevel eJobLevel, const RaceType eRace, const StatusType eType1, const unsigned char cIncrement1, const StatusType eType2, const unsigned char cIncrement2, const bool bLevelSwap); CClass(); void LevelUp(CHAR_INFOST* InfoSt); bool JobChange(CharacterDBData* DBData, unsigned char cClassType); bool UpgradeClass(CharacterDBData* DBData, unsigned char cClassType); bool DowngradeClass(CharacterDBData* DBData, unsigned char cClassType); bool InitializeClass(CharacterDBData* DBData, unsigned char cClassType); // ·¹º§ 1ÀÇ ±âº» Ŭ·¡½º·Î ¸¸µç´Ù. bool CheckState(ChState& State, unsigned char cLevel); bool CheckMinState(ChState& State, unsigned char cLevel); unsigned short GetMinState(StatusType eType, unsigned char cLevel); static JobLevel GetJobLevel(unsigned char cClass); static unsigned char GetPreviousJob(unsigned char cClass); static unsigned char GetRequiredIP(unsigned short usClass, unsigned char cType); static RaceType GetRace(unsigned char cClass); protected: StatusType m_eIncrementType[2]; // ¼ºÀå½Ã Ãß°¡ ´É·ÂÄ¡ ŸÀÔ unsigned char m_cIncrementValue[2]; // ¼ºÀå½Ã Ãß°¡ ´É·ÂÄ¡ °ª JobType m_eJobType; // ÇöÀç Á÷¾÷ JobType m_ePrevJobType; // ¹Ù·Î ÇÏÀ§ Ŭ·¡½ºÀÇ Á÷¾÷ JobLevel m_eJobLevel; // ÇöÀç Á÷¾÷ÀÇ ·¹º§ RaceType m_eRace; // ¼Ò¼Ó Á¾Á· bool m_bLevelSwap; // ·¹º§¿¡ µû¶ó ½ºÅÈÀÌ ¹ø°¥¾Æ°¡¸é¼­ ¼ºÀåÇÔ (¦¼ö 2/1 ¼ºÀåÀ̸é Ȧ¼ö 1/2 ¼ºÀå) inline void IncrementByType(CHAR_INFOST* InfoSt, unsigned char cTypeIndex, unsigned char cIncrementIndex); }; extern CClass ClassTable[CClass::MAX_CLASS]; inline void CClass::IncrementByType(CHAR_INFOST* InfoSt, unsigned char cTypeIndex, unsigned char cIncrementIndex) { switch(m_eIncrementType[cTypeIndex]) { case STR: InfoSt->STR += m_cIncrementValue[cIncrementIndex]; break; case DEX: InfoSt->DEX += m_cIncrementValue[cIncrementIndex]; break; case CON: InfoSt->CON += m_cIncrementValue[cIncrementIndex]; break; case INT: InfoSt->INT += m_cIncrementValue[cIncrementIndex]; break; case WIS: InfoSt->WIS += m_cIncrementValue[cIncrementIndex]; break; } } #endif