Files
Client/GameTools/GLOBALSCRIPT/Skill/SkillStructure.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

162 lines
4.6 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 { SkillMask = 0x8000 };
namespace Type
{
enum Type
{
NONE = 0,
PASSIVE = 1,
INSTANCE = 2,
CAST = 3,
CHANT = 4,
ENCHANT = 5,
MAX_SKILL_TYPE = 6
};
extern const CTypeName SkillTypes[MAX_SKILL_TYPE];
};
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가 일정 이상 필요
MAX_STATUS_LIMIT = 6
};
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,
MAX_TARGET_TYPE = 11
};
extern const CTypeName TargetTypes[MAX_TARGET_TYPE];
};
struct ProtoType
{
enum { MAX_LIMIT_NUM = 2, MAX_FILE_NAME = 32, MAX_SKILL_NAME = 32 };
//-----------------------------------
char m_szEffectFileName[MAX_FILE_NAME];
char m_szHitFileName[MAX_FILE_NAME];
char m_szCastingFileName[MAX_FILE_NAME];
Item::SpriteData m_SpriteInfo;
//-----------------------------------
Type::Type 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;
unsigned short m_LevelMP;
unsigned short m_StartTick;
//-----------------------------------
unsigned short m_LevelTick;
unsigned short m_usCoolDownTime;
//-----------------------------------
float m_EffectDistance;
float m_EffectExtent;
//-----------------------------------
bool m_bProtection;
bool m_bGauge;
bool m_bIsClassSkill;
bool m_bInterrupt;
unsigned char m_cEndScript;
unsigned char m_cEndCoolDown;
unsigned char m_cMinRange;
unsigned char m_cMaxRange;
//-----------------------------------
unsigned char m_cStrikeNum;
unsigned char m_cSpell_LockCount;
unsigned char m_cPadding[6];
//-----------------------------------
ProtoType();
void Initialize();
};
}
#pragma pack()
#endif