Files
Client/Server/RylServerProject/RylGameLibrary/Creature/Character/CharacterClass.h
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

120 lines
3.0 KiB
C++

#ifndef _CHARACTER_CLASS_H_
#define _CHARACTER_CLASS_H_
#include <DB/DBDefine.h>
// 전방 참조
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