Files
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

205 lines
6.2 KiB
C++

#ifndef _SKILL_STRUCTURE_H_
#define _SKILL_STRUCTURE_H_
#pragma once
#include <Utility/TypeArray.h>
#include <Item/ItemStructure.h>
#pragma pack(8)
namespace Skill
{
enum Const
{
SKILL_MASK = 0x8000,
ERROR_OF_DISTANCE = 10 // 거리 예상 오차 (스킬 타겟 거리 계산시 사용)
};
namespace Type
{
enum AbilityType
{
AB_ANIMAL_TALK = 0, // 동물NPC와 대화
AB_SOCIALEX = 1, // 확장 소셜모션 사용가능
AB_NOFIRSTATK = 2, // 선공몹 공격 안당함
AB_MOUNT_SPEEDUP = 3, // 탈것 이속 증가
AB_TEMPINVEN_TIMEUP = 4, // 임시인벤토리 시간증가
AB_GETUP_GOLD = 5, // 골드 획득량 증가
AB_RESPAWN_EX = 6, // 확장 리스폰 사용
AB_FOOD_UP = 7, // 음식류 능력치 증가
AB_SHOP_MEMBERSHIP = 8, // 상점 멤버십(구매가격 하락, 판매가격 상승)
AB_CHEMICAL = 9, // 잡템을 회복템으로 변경
AB_ENDUR_SHILD = 10, // 내구도 하락 감소
AB_RECOVERY_UP = 11, // HP,MP 회복도 증가
AB_GATHER_FIND = 12, // 미니맵에 게더를 보여준다
AB_MYEQUIP_UP = 13, // 자신의 장비 획득율 증가
AB_LUCK_UP = 14, // 럭찬 증가
AB_EQUIP_LEVELDOWN = 15, // 장비의 제한 레벨을 다운시킨다.
AB_HERBS = 16, // 약초 채집
AB_MINING = 17, // 채광
MAX_ABILITY_TYPE = 18
};
enum SkillType
{
NONE = 0,
PASSIVE = 1,
INSTANCE = 2,
CAST = 3,
CHANT = 4,
ENCHANT = 5,
ITEM = 6,
SET = 7,
ACTION = 8,
ABILITY = 9,
GATHER = 10,
MAX_SKILL_TYPE = 11
};
extern const CTypeName SkillTypes[MAX_SKILL_TYPE];
enum DRCType
{
MAGIC = 0,
RIGHT_WEAPON = 1,
LEFT_WEAPON = 2
};
};
namespace UseLimit
{
enum Type
{
NONE = 0,
// 인간
FOR_FIGHTER = 1, // 스탶 대거 맨손 활 석궁 사용불가
WITH_SHIELD = 2, // 방패착용 : 방패가 없으면 사용할 수 없다.
FOR_FIGHTER_TWOHANDED = 3, // 양손무기착용(스탶제외) : 양손무기 착용시에만 사용이 가능하다. 스태프일 경우에는 사용이 불가능하다.
FOR_ALL_ONEHAND = 4, // 한손무기착용 : 양손무기나 맨손으로는 사용이 불가능하다. 대거 제외
WITH_DAGGER = 5, // 대거착용 : 대거 착용시에만 사용이 가능하다.
WITH_THROWING_DAGGER = 6, // 쓰로잉대거소모 : 인벤토리에 쓰로잉 대거가 남아있을 때에만 사용이 가능하다. (손에 장착되어 있을 필요는 없다.)
RANGED = 7, // 활/석궁장착,화살소모 : 활이나 석궁이 장착되어 있고 인벤토리에 화살이 남아있을 때에만 사용이 가능하다.
// 아칸
LEFT_ARM = 8, // 왼팔장착 : 왼팔을 장착하고 있어야지만 사용이 가능하다.
GUARD_ARM = 9, // 가드암장착 : 방어용의 암을 장착하고 있어야지만 사용이 가능하다.
WITH_WEAPON = 10, // 무기장착 : 오른손이 맨손일 때에는 사용이 불가능하다.
ATTACK_ARM = 11, // 어택암장착 : 공격용의 암을 장착하고 있어야지만 사용이 가능하다.
GUN_ARM = 12, // 건암장착 탄약소모 : 장거리용의 암을 장착하고 탄약을 가지고 있어야지만 사용이 가능하다.
KNIFE_ARM = 13, // 나이프암장착 : 나이프형의 암을 장착하고 있어야지만 사용이 가능하다.
WITH_CLOW = 14, // 클로우장착 : 클로우 착용시에만 사용이 가능하다.
MAX_USE_LIMIT = 15
};
extern const CTypeName UseLimits[MAX_USE_LIMIT];
};
// 스킬 습득 제한
namespace StatusLimit
{
enum Type
{
NONE = 0, // 제한 없음
STR = 1, // STR이 일정 이상 필요
DEX = 2, // DEX가 일정 이상 필요
CON = 3, // CON이 일정 이상 필요
INT = 4, // INT가 일정 이상 필요
WIS = 5, // WIS가 일정 이상 필요
LEVEL = 6, // LEVEL이 일정 이상 필요 //--//
MAX_STATUS_LIMIT = 7 //--//
};
extern const CTypeName StatusLimits[MAX_STATUS_LIMIT];
};
namespace Target
{
enum Type
{
NONE = 0,
MELEE = 1,
FRIEND = 2,
ENEMY = 3,
DEAD_FRIEND = 4,
DEAD_ENEMY = 5,
FRIEND_OBJECT = 6,
ENEMY_OBJECT = 7,
PARTY = 8,
FRIEND_EXCEPT_SELF = 9,
LINE_ENEMY = 10,
SUMMON = 11,
MAX_TARGET_TYPE = 12
};
extern const CTypeName TargetTypes[MAX_TARGET_TYPE];
};
struct ProtoType
{
enum
{
MAX_LIMIT_NUM = 2,
MAX_FILE_NAME = 32,
MAX_SKILL_NAME = 32,
MAX_SKILL_DESCRIBE = 256
};
char m_szEffectFileName[MAX_FILE_NAME]; // 이펙트 파일명
char m_szHitFileName[MAX_FILE_NAME]; // 히트 파일명
char m_szCastingFileName[MAX_FILE_NAME]; // 캐스팅 파일명
Item::SpriteData m_SpriteInfo; // 스프라이트 정보
char m_szSkillDescribe[MAX_SKILL_DESCRIBE]; // 스킬 설명
Type::SkillType m_eSkillType; // See Namespace Type
Target::Type m_eTargetType; // See Namespace Target
UseLimit::Type m_eUseLimit; // See Namespace UseLimit
unsigned char m_StatusLimitType[MAX_LIMIT_NUM]; // 습득 제한 스탯 종류
char m_StatusLimitValue[MAX_LIMIT_NUM]; // 습득 제한 스탯 값
unsigned short m_usSkill_ID; // 스킬 아이디
unsigned short m_StartMP; // 시작 소모 MP
unsigned short m_LevelMP; // 레벨당 소모 MP
unsigned short m_LockMP; // 락카운트당 소모 MP
unsigned short m_StartTick; // 시작 틱카운트
unsigned short m_LevelTick; // 레벨당 틱카운트
unsigned short m_usParentSkill; // 부모 스킬 아이디
unsigned short m_usChildSkill; // 자식 스킬 아이디
unsigned long m_dwCoolDownTime; // 쿨다운 시간
float m_fMinRange; // 최소 사정 거리
float m_fMaxRange; // 최대 사정 거리
float m_fEffectExtent; // 효과 범위
bool m_bProtection; // 보호 스킬에 의해 막히는가?
bool m_bGauge; // 연속 사용이 가능한 스킬인가? (ex. 패스트히드)
bool m_bIsClassSkill; // 클래스 스킬인가?
bool m_bInterrupt; // 스턴을 깨는 스킬인가?
bool m_bCounter; // 카운터 당하는 스킬인가?
unsigned char m_cEndScript; // EndScript를 사용하는가?
unsigned char m_cEndCoolDown; // 스킬 효과가 없어지면 쿨다운이 돌아간다. (ex. 스텔스)
unsigned char m_cStrikeNum; // 다단 히트 횟수
unsigned char m_cPadding[1];
ProtoType();
void Initialize();
};
}
#pragma pack()
#endif