client/UserInterface/PythonSkill.h

299 lines
8.9 KiB
C++
Raw Blame History

#pragma once
#include "../gamelib/ItemData.h"
#include "../EterBase/Poly/Poly.h"
class CInstanceBase;
class CPythonSkill : public CSingleton<CPythonSkill>
{
public:
enum
{
SKILL_TYPE_NONE,
SKILL_TYPE_ACTIVE,
SKILL_TYPE_SUPPORT,
SKILL_TYPE_GUILD,
SKILL_TYPE_HORSE,
SKILL_TYPE_MAX_NUM,
};
enum ESkillTableTokenType
{
TABLE_TOKEN_TYPE_VNUM,
TABLE_TOKEN_TYPE_NAME,
TABLE_TOKEN_TYPE_TYPE,
TABLE_TOKEN_TYPE_LEVEL_STEP,
TABLE_TOKEN_TYPE_MAX_LEVEL,
TABLE_TOKEN_TYPE_LEVEL_LIMIT,
TABLE_TOKEN_TYPE_POINT_ON,
TABLE_TOKEN_TYPE_POINT_POLY,
TABLE_TOKEN_TYPE_SP_COST_POLY,
TABLE_TOKEN_TYPE_DURATION_POLY,
TABLE_TOKEN_TYPE_DURATION_SP_COST_POLY,
TABLE_TOKEN_TYPE_COOLDOWN_POLY,
TABLE_TOKEN_TYPE_MASTER_BONUS_POLY,
TABLE_TOKEN_TYPE_ATTACK_GRADE_POLY,
TABLE_TOKEN_TYPE_FLAG,
TABLE_TOKEN_TYPE_AFFECT_FLAG,
TABLE_TOKEN_TYPE_POINT_ON2,
TABLE_TOKEN_TYPE_POINT_POLY2,
TABLE_TOKEN_TYPE_DURATION_POLY2,
TABLE_TOKEN_TYPE_AFFECT_FLAG2,
TABLE_TOKEN_TYPE_PREREQUISITE_SKILL_VNUM,
TABLE_TOKEN_TYPE_PREREQUISITE_SKILL_LEVEL,
TABLE_TOKEN_TYPE_SKILL_TYPE,
TABLE_TOKEN_TYPE_MAX_HIT,
TABLE_TOKEN_TYPE_SPLASH_AROUND_DAMAGE_ADJUST_POLY,
TABLE_TOKEN_TYPE_TARGET_RANGE,
TABLE_TOKEN_TYPE_SPLASH_RANGE,
TABLE_TOKEN_TYPE_MAX_NUM,
};
enum ESkillDescTokenType
{
DESC_TOKEN_TYPE_VNUM,
DESC_TOKEN_TYPE_JOB,
DESC_TOKEN_TYPE_NAME1,
DESC_TOKEN_TYPE_NAME2,
DESC_TOKEN_TYPE_NAME3,
DESC_TOKEN_TYPE_DESCRIPTION,
DESC_TOKEN_TYPE_CONDITION1,
DESC_TOKEN_TYPE_CONDITION2,
DESC_TOKEN_TYPE_CONDITION3,
DESC_TOKEN_TYPE_CONDITION4,
DESC_TOKEN_TYPE_ATTRIBUTE,
DESC_TOKEN_TYPE_WEAPON,
DESC_TOKEN_TYPE_ICON_NAME,
DESC_TOKEN_TYPE_MOTION_INDEX,
DESC_TOKEN_TYPE_MOTION_INDEX_GRADE_NUM,
DESC_TOKEN_TYPE_TARGET_COUNT_FORMULA,
DESC_TOKEN_TYPE_MOTION_LOOP_COUNT_FORMULA,
DESC_TOKEN_TYPE_AFFECT_DESCRIPTION_1,
DESC_TOKEN_TYPE_AFFECT_MIN_1,
DESC_TOKEN_TYPE_AFFECT_MAX_1,
DESC_TOKEN_TYPE_AFFECT_DESCRIPTION_2,
DESC_TOKEN_TYPE_AFFECT_MIN_2,
DESC_TOKEN_TYPE_AFFECT_MAX_2,
DESC_TOKEN_TYPE_AFFECT_DESCRIPTION_3,
DESC_TOKEN_TYPE_AFFECT_MIN_3,
DESC_TOKEN_TYPE_AFFECT_MAX_3,
DESC_TOKEN_TYPE_LEVEL_LIMIT,
DESC_TOKEN_TYPE_MAX_LEVEL,
DESC_TOKEN_TYPE_MAX_NUM,
CONDITION_COLUMN_COUNT = 3,
AFFECT_COLUMN_COUNT = 3,
AFFECT_STEP_COUNT = 3,
};
enum
{
SKILL_ATTRIBUTE_NEED_TARGET = (1 << 0),
SKILL_ATTRIBUTE_TOGGLE = (1 << 1),
SKILL_ATTRIBUTE_WEAPON_LIMITATION = (1 << 2),
SKILL_ATTRIBUTE_MELEE_ATTACK = (1 << 3),
SKILL_ATTRIBUTE_USE_HP = (1 << 4),
SKILL_ATTRIBUTE_CAN_CHANGE_DIRECTION = (1 << 5),
SKILL_ATTRIBUTE_STANDING_SKILL = (1 << 6),
SKILL_ATTRIBUTE_ONLY_FOR_ALLIANCE = (1 << 7),
SKILL_ATTRIBUTE_CAN_USE_FOR_ME = (1 << 8),
SKILL_ATTRIBUTE_NEED_CORPSE = (1 << 9),
SKILL_ATTRIBUTE_FAN_RANGE = (1 << 10),
SKILL_ATTRIBUTE_CAN_USE_IF_NOT_ENOUGH = (1 << 11),
SKILL_ATTRIBUTE_NEED_EMPTY_BOTTLE = (1 << 12),
SKILL_ATTRIBUTE_NEED_POISON_BOTTLE = (1 << 13),
SKILL_ATTRIBUTE_ATTACK_SKILL = (1 << 14),
SKILL_ATTRIBUTE_TIME_INCREASE_SKILL = (1 << 15), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> attribute
SKILL_ATTRIBUTE_CHARGE_ATTACK = (1 << 16),
SKILL_ATTRIBUTE_PASSIVE = (1 << 17),
SKILL_ATTRIBUTE_CANNOT_LEVEL_UP = (1 << 18),
SKILL_ATTRIBUTE_ONLY_FOR_GUILD_WAR = (1 << 19),
SKILL_ATTRIBUTE_MOVING_SKILL = (1 << 20),
SKILL_ATTRIBUTE_HORSE_SKILL = (1 << 21),
SKILL_ATTRIBUTE_CIRCLE_RANGE = (1 << 22),
SKILL_ATTRIBUTE_SEARCH_TARGET = (1 << 23),
};
enum
{
SKILL_NEED_WEAPON_SWORD = (1 << CItemData::WEAPON_SWORD),
SKILL_NEED_WEAPON_DAGGER = (1 << CItemData::WEAPON_DAGGER),
SKILL_NEED_WEAPON_BOW = (1 << CItemData::WEAPON_BOW),
SKILL_NEED_WEAPON_TWO_HANDED = (1 << CItemData::WEAPON_TWO_HANDED),
SKILL_NEED_WEAPON_DOUBLE_SWORD = (1 << CItemData::WEAPON_DAGGER),
SKILL_NEED_WEAPON_BELL = (1 << CItemData::WEAPON_BELL),
SKILL_NEED_WEAPON_FAN = (1 << CItemData::WEAPON_FAN),
SKILL_NEED_WEAPON_ARROW = (1 << CItemData::WEAPON_ARROW),
SKILL_NEED_WEAPON_EMPTY_HAND = (1 << CItemData::WEAPON_NONE),
};
enum
{
VALUE_TYPE_FREE,
VALUE_TYPE_MIN,
VALUE_TYPE_MAX,
};
enum
{
SKILL_GRADE_COUNT = 3,
SKILL_EFFECT_COUNT = 4, //<2F><>ų<EFBFBD><C5B3> <20><>,<2C><>,<2C><><EFBFBD><EFBFBD> <20>̿ܿ<CCBF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>߰<EFBFBD>.
SKILL_GRADE_STEP_COUNT = 20,
SKILL_GRADEGAP = 25,
};
typedef struct SAffectData
{
std::string strAffectDescription;
std::string strAffectMinFormula;
std::string strAffectMaxFormula;
} TAffectData;
typedef struct SAffectDataNew
{
std::string strPointType;
std::string strPointPoly;
} TAffectDataNew;
typedef struct SRequireStatData
{
BYTE byPoint;
BYTE byLevel;
} TRequireStatData;
typedef struct SGradeData
{
std::string strName;
CGraphicImage * pImage;
WORD wMotionIndex;
} TGradeData;
typedef struct SSkillData
{
static DWORD MELEE_SKILL_TARGET_RANGE;
// Functions
SSkillData();
DWORD GetTargetRange() const;
BOOL CanChangeDirection();
BOOL IsFanRange();
BOOL IsCircleRange();
BOOL IsAutoSearchTarget();
BOOL IsNeedTarget();
BOOL IsNeedCorpse();
BOOL IsToggleSkill();
BOOL IsUseHPSkill();
BOOL IsStandingSkill();
BOOL CanUseWeaponType(DWORD dwWeaponType);
BOOL IsOnlyForAlliance();
BOOL CanUseForMe();
BOOL CanUseIfNotEnough();
BOOL IsNeedEmptyBottle();
BOOL IsNeedPoisonBottle();
BOOL IsNeedBow();
BOOL IsAttackSkill();
BOOL IsHorseSkill();
BOOL IsMovingSkill();
BOOL IsTimeIncreaseSkill();
BOOL IsMeleeSkill();
BOOL IsChargeSkill();
BOOL IsOnlyForGuildWar();
bool GetState(const char * c_szStateName, int * piState, int iMinMaxType = VALUE_TYPE_FREE);
float ProcessFormula(CPoly * pPoly, float fSkillLevel = 0.0f, int iMinMaxType = VALUE_TYPE_FREE);
const char * GetAffectDescription(DWORD dwIndex, float fSkillLevel);
DWORD GetSkillCoolTime(float fSkillPoint);
int GetNeedSP(float fSkillPoint);
DWORD GetContinuationSP(float fSkillPoint);
DWORD GetMotionLoopCount(float fSkillPoint);
DWORD GetTargetCount(float fSkillPoint);
DWORD GetDuration(float fSkillPoint);
DWORD GetSkillMotionIndex(int iGrade=-1);
BYTE GetMaxLevel();
BYTE GetLevelUpPoint();
bool IsCanUseSkill();
BOOL IsNoMotion();
const std::string GetName() const;
BYTE GetType() const;
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// Variable
BYTE byType;
DWORD dwSkillIndex;
BYTE byMaxLevel;
BYTE byLevelUpPoint;
BYTE byLevelLimit;
BOOL bNoMotion;
std::string strName;
std::string strIconFileName;
std::string strDescription;
std::string strMotionScriptFileName;
std::vector<std::string> ConditionDataVector;
std::vector<TAffectData> AffectDataVector;
std::vector<TAffectDataNew> AffectDataNewVector;
std::vector<TRequireStatData> RequireStatDataVector;
std::string strCoolTimeFormula;
std::string strTargetCountFormula;
std::string strMotionLoopCountFormula;
std::string strNeedSPFormula;
std::string strContinuationSPFormula;
std::string strDuration;
DWORD dwSkillAttribute;
DWORD dwNeedWeapon;
DWORD dwTargetRange;
WORD wMotionIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
WORD wMotionIndexForMe; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
BOOL isRequirement;
std::string strRequireSkillName;
BYTE byRequireSkillLevel;
TGradeData GradeData[SKILL_EFFECT_COUNT];
CGraphicImage * pImage;
/////
static std::map<std::string, DWORD> ms_StatusNameMap;
static std::map<std::string, DWORD> ms_NewMinStatusNameMap;
static std::map<std::string, DWORD> ms_NewMaxStatusNameMap;
static DWORD ms_dwTimeIncreaseSkillNumber;
} TSkillData;
typedef std::map<DWORD, TSkillData> TSkillDataMap;
typedef std::map<DWORD, DWORD> TSkillMotionIndexMap;
typedef std::map<std::string, std::string> TPathNameMap;
public:
CPythonSkill();
virtual ~CPythonSkill();
void Destroy();
bool RegisterSkill(DWORD dwSkillIndex, const char * c_szFileName);
bool RegisterSkillTable(const char * c_szFileName);
bool RegisterSkillDesc(const char * c_szFileName);
BOOL GetSkillData(DWORD dwSkillIndex, TSkillData ** ppSkillData);
bool GetSkillDataByName(const char * c_szName, TSkillData ** ppSkillData);
void SetPathName(const char * c_szFileName);
const char * GetPathName();
void TEST();
protected:
void __RegisterGradeIconImage(TSkillData & rData, const char * c_szHeader, const char * c_szImageName);
void __RegisterNormalIconImage(TSkillData & rData, const char * c_szHeader, const char * c_szImageName);
protected:
TSkillDataMap m_SkillDataMap;
std::string m_strPathName;
std::map<std::string, DWORD> m_SkillTypeIndexMap;
std::map<std::string, DWORD> m_SkillAttributeIndexMap;
std::map<std::string, DWORD> m_SkillNeedWeaponIndexMap;
std::map<std::string, DWORD> m_SkillWeaponTypeIndexMap;
TPathNameMap m_PathNameMap;
};