#pragma once #include "ItemBase.h" #include "MonsterBase.h" #include "SkillBase.h" #include //#include //#include #ifdef _RDBGENTEST #pragma pack( push, 1 ) #endif struct JobInfo { enum { FIGHTER = 1, HUNTER = 2, MAGICIAN = 3, SUMMONER = 4, }; enum { GAIA = 3, DEVA = 4, ASURA = 5, }; enum { GAIA_BASIC_JOB = 100, DEVA_BASIC_JOB = 200, ASURA_BASIC_JOB = 300, }; enum { BANGRANGJA = 100, TUSA = 101, ///< JUNSA / GUNGSA JUSULSA = 102, ///< MADOSA / MATUSA YASUSA = 103, ///< MASUSA JUNSA = 110, GUNGSA = 111, MADOSA = 112, MATUSA = 113, MASUSA = 114, GUMSUNG = 121, GIGONGSA = 122, DAISASU = 123, BIJUNSULSA = 124, JUNGRYUNGSULSA = 125, CHOHONSA = 126, //-------------------------------------------------------------------------- GAID = 200, FIGHTER_JOP = 201, ///< NENIGHT / WARRIOR CLERIC = 202, ///< MAGE / PRIST TAMER = 203, ///< BAIDER NENIGHT = 210, WARRIOR = 211, MAGE = 212, PRIST = 213, BAIDER = 214, PALADIN = 221, MINISTER = 222, SHAININGRANGER = 223, HIGHTPRIST = 224, SAIGE = 225, PANCER = 226, //-------------------------------------------------------------------------- STEPPER = 300, STRIDER = 301, ///< ASSASSIN / RANGER MAGICIAN_JOP = 302, ///< SORCERER / DARKMAGICIAN SUMMONER_JOP = 303, ///< BATTLESUMMONER ASSASSIN = 310, RANGER = 311, SORCERER = 312, DARKMAGICIAN = 313, BATTLESUMMONER = 314, DARKCHAICER = 321, DARKSTRIKER = 322, NECROMANCER = 323, DARKPRIST = 324, ARKSORCERER = 325, SPIRITSUMMONER = 326 }; int id; int text_id; int stat_id; int skill_tree_id; char job_class; char job_depth; short up_lv; short up_jlv; short availble_job[4]; }; #ifdef _RDBGENTEST #pragma pack( pop ) #endif struct JobLevelBonus { int job_id; float strength[4]; float vital[4]; float dexterity[4]; float agility[4]; float intelligence[4]; float mentality[4]; float luck[4]; }; // sonador 10.4.1 스킬 툴팁 리뉴얼 #ifdef _RDBGENTEST #pragma pack(push,1) #endif struct StateInfo { enum { TYPE_NORMAL = 0, TYPE_DUPLICATE = 1, TYPE_DEPENDENCE = 2, }; enum { // 2012.10.24 Metin 각성 옵션 사용. STR = 1, //FLAG_STR = ( 1 << 0 ), // 힘 VIT = 1<<1, //FLAG_VIT = ( 1 << 1 ), // 체력 DEX = 1<<2, //FLAG_AGI = ( 1 << 2 ), // 민첩 AGI = 1<<3, //FLAG_DEX = ( 1 << 3 ), // 집중 INT = 1<<4, //FLAG_INT = ( 1 << 4 ), // 지능 MEN = 1<<5, //FLAG_MEN = ( 1 << 5 ), // 정신 LUCK = 1<<6, //FLAG_LUK = ( 1 << 6 ), PHYSICS = 1<<7, //FLAG_ATTACK_POINT = ( 1 << 7 ), // 물리 공격력 MAGIC = 1<<8, //FLAG_MAGIC_POINT = ( 1 << 8 ), // 마법 공격력 PHY_DEF = 1<<9, //FLAG_DEFENCE = ( 1 << 9 ), // 물리 방어력 MGC_DEF = 1<<10, //FLAG_MAGIC_DEFENCE = ( 1 << 10 ),// 마법 방어력 A_SPEED = 1<<11, //FLAG_ATTACK_SPEED = ( 1 << 11 ), // 공격속도 C_SPEED = 1<<12, //FLAG_CAST_SPEED = ( 1 << 12 ), // 시전속도 M_SPEED = 1<<13, //FLAG_MOVE_SPEED = ( 1 << 13 ), // 이동속도 ACCURACY = 1<<14, //FLAG_ACCURACY = ( 1 << 14 ), // 명중 MGS_ACRC = 1<<15, //FLAG_MAGIC_ACCURACY = ( 1 << 15 ), // 마법명중 CRI = 1<<16, //FLAG_CRITICAL = ( 1 << 16 ), BLOCK = 1<<17, //FLAG_BLOCK = ( 1 << 17 ), BLC_DEF = 1<<18, //FLAG_BLOCK_DEFENCE = ( 1 << 18 ), AVOIDANCE = 1<<19, //FLAG_AVOID = ( 1 << 19 ), // 회피 MGS_RESIST = 1<<20, //FLAG_MAGIC_RESISTANCE = ( 1 << 20 ) // 마법저항 MAXHP = 1<<21, //FLAG_MAX_HP = ( 1 << 21 ), MAXMP = 1<<22, //FLAG_MAX_MP = ( 1 << 22 ), MAXSP = 1<<23, //FLAG_MAX_SP = ( 1 << 23 ), HP_RECVRY = 1<<24, //FLAG_HP_REGEN_ADD = ( 1 << 24 ), MP_RECVRY = 1<<25, //FLAG_MP_REGEN_ADD = ( 1 << 25 ), SP_RECVRY = 1<<26, //FLAG_SP_REGEN_ADD = ( 1 << 26 ), HP_REGEN = 1<<27, //FLAG_HP_REGEN_RATIO = ( 1 << 27 ), MP_REGEN = 1<<28, //FLAG_MP_REGEN_RATIO = ( 1 << 28 ), CRI_POWER = 1<<29, //FLAG_CRITICAL_DAMAGE_BACKUP = ( 1 << 29 ), POSSESS = 1<<30, //FLAG_MAX_WEIGHT = ( 1 << 30 ), }; enum { NOR_RESIST = 1, FIRE_RESIST = 1<<1, WATER_RESIST = 1<<2, WIND_RESIST = 1<<3, EARTH_RESIST = 1<<4, LIGHT_RESIST = 1<<5, DARK_RESIST = 1<<6, /// 2011.03.30 - prodongi PBLOCK_CHANCE = 1<<9, ADEF_IGNORE = 1<<10, MDEF_IGNORE = 1<<11, ADEM_PENETRATION = 1<<12, MDEM_PENETRATION = 1<<13, NOR_CONTN = 1<<14, FIRE_CONTN = 1<<15, WATER_CONTN = 1<<16, WIND_CONTN = 1<<17, EARTH_CONTN = 1<<18, LIGHT_CONTN = 1<<19, DARK_CONTN = 1<<20, NOR_DAG = 1<<21, FIRE_DAG = 1<<22, WATER_DAG = 1<<23, WIND_DAG = 1<<24, EARTH_DAG = 1<<25, LIGHT_DAG = 1<<26, DARK_DAG = 1<<27, CRI_DAG = 1<<28, HP_REGEN_STOP = 1<<29, MP_REGEN_STOP = 1<<30, }; enum STATE_FX_BASE { STATE_FX_BASE_NONE = 0, STATE_FX_BASE_CONTINUAL_PHYSICAL_DAMAGE = 1, STATE_FX_BASE_CONTINUAL_PHYSICAL_DAMAGE_IGNORE_DEFENSE = 2, STATE_FX_BASE_CONTINUAL_MAGICAL_DAMAGE = 3, STATE_FX_BASE_CONTINUAL_MAGICAL_DAMAGE_IGNORE_DEFENSE = 4, STATE_FX_BASE_MAGICAL_HP_RESTORATION = 11, STATE_FX_BASE_MAGICAL_MP_RESTORATION = 12, }; enum STATE_FX { STATE_PARAMETER_INCREASE = 1, STATE_PARAMETER_AMPLIFY = 2, STATE_PARAMETER_INCREASE_SHIELD = 3, STATE_PARAMETER_INCREASE_SHIELD_2 = 4, STATE_BLESS_OF_GODDESS = 7, STATE_PARAMETER_SYNC = 8, // 2010.05.14 파라메터 동기화 - prodongi STATE_DOUBLE_ATTACK = 21, STATE_ATTACK_ADD_DAMAGE = 22, STATE_ATTACK_ADD_DAMAGE_RATE = 23, STATE_MAGIC_ADD_DAMAGE = 24, STATE_MAGIC_ADD_DAMAGE_RATE = 25, STATE_ATTACK_ADD_STATE = 26, STATE_ATTACK_RECOVERY = 27, STATE_ADD_HP_MP_WHEN_CRITICAL = 34, STATE_AMPLIFY_SKILL_HEAL_AMOUNT = 35, STATE_ATTACK_TO_TARGET = 36, // 2010.07.07 공격시 일정확률로 공격대상에게 지속효과 부여 - prodongi STATE_ATTACK_TO_MY = 37, // 2010.06.28 공격시 일정확률로 자신에게 지속효과 부여 - prodongi STATE_ATTACKED_TO_ATTACKER = 38, // 2010.05.17 피격시 일정확률로 공격자에게 지속효과 부여 - prodongi STATE_ATTACKED_TO_MY = 39, // 2010.05.17 피격시 일정확률로 자신에게 지속효과 부여 - prodongi STATE_ATTACK_RECOVERY_RATE = 41, STATE_ATTACK_ABSORB = 42, STATE_BEATTACKED_REFLECTION = 43, STATE_BEATTACKED_REFLECTION_IGNORE_DEFENSE = 44, STATE_DECREASE_DAMAGE_BY_RATE = 46, STATE_TRANSFER_DAMAGE_TO_MP = 49, STATE_REALTIME_MAINTENANCE_RECOVERY = 61, STATE_RECOVERY_HP_MP = 64, /// 2011.04.05 HP, MP 지속 회복 - prodongi STATE_RECOVERY_HP = 73, /// 2011.04.26 지속시간 동안 적용되는 hp 회복 - prodongi STATE_INCAPACITATE_STATE = 81, STATE_IMPOSSIBLE_ACTION = 82, STATE_INCREASE_HATE = 83, STATE_INCREASE_INTIMIDATION = 86, STATE_INTERRUPT_SKILL = 87, STATE_ADD_STATE_IN_REGION = 88, STATE_DECREASE_MP_CONSUMPTION = 91, STATE_INCREASE_POWER_CRI_AG_COOL = 92, STATE_SKILL_INCREASE_POWER_CRI_AG_COOL = 93, STATE_ATTACK_KNOCKBACK = 94, STATE_ATTACK_RANGETYPE = 95, STATE_SELF_REBIRTH = 109, STATE_DETECT_HIDING = 111, STATE_RIDING = 200, /// 2011.03.07 - prodongi STATE_INVULNERABLENESS = 3111, /// 불사신 STATE_ADD_STATE_TO_MY_WHEN_KILL_TARGET = 3201, /// 대상을 죽였을 때, 자신에게 지속효과 부여 STATE_ADD_STATE_TO_TARGET_WHEN_CRITICAL_ATTACK = 3202, /// 크리티컬 공격시 일정확률로 공격대상에게 지속효과 부여 STATE_ADD_STATE_TO_MY_WHEN_CRITICAL_ATTACK = 3203, /// 크리티컬 공격시 일정확률로 자신에게 지속효과 부여 STATE_ADD_STATE_TO_ATTACKER_WHEN_CRITICAL_ATTACKED = 3204, /// 크리티컬 피격시 일정확률로 공격자에게 지속효과 부여 STATE_ADD_STATE_TO_MY_WHEN_CRITICAL_ATTACKED = 3205, /// 크리티컬 피격시 일정확률로 자신에게 지속효과 부여 STATE_ADD_STATE_TO_ATTACKER_WHEN_AVOIDANCE = 3206, /// 회피 발동시 일정확률로 공격자에게 지속효과 부여 STATE_ADD_STATE_TO_MY_WHEN_AVOIDANCE = 3207, /// 회피 발동시 일정확률로 자신에게 지속효과 부여 STATE_ADD_STATE_TO_ATTACKER_WHEN_SHIELD_BLOCK = 3208, /// 방패 블록 발동시 일정확률로 공격자에게 지속효과 부여 STATE_ADD_STATE_TO_MY_WHEN_SHIELD_BLOCK = 3209, /// 방패 블록 발동시 일정확률로 자신에게 지속효과 부여 STATE_ADD_STATE_TO_ATTACKER_SHIELD_PERFECT_BLOCK = 3210, /// 방패 퍼펙트 블록 발동시 일정확률로 공격자에게 지속효과 부여 STATE_ADD_STATE_TO_MY_SHIELD_PERFECT_BLOCK = 3211, /// 방패 퍼펙트 블록 발동시 일정확률로 자신에게 지속효과 부여 STATE_INFINITY_SUMMON_RECALL = 3121, /// 무한의 이체 소환 /// 2011.03.18 - prodongi STATE_RANGE_TYPE_MODIFY_DAMAGE = 3021, /// 기본공격시 추가데미지 증가 + 피격시 데미지 감소 STATE_ATTACKED_DEC_DAMAGE = 3031, /// 피격시 입는 모든 데미지를 일정% + 일정수치 감소시킨다. STATE_ATTACK_AMPLIFY_ATT_DAMAGE = 3062, /// 기본공격시 공격력 기반 데미지 증폭 STATE_ATTACKED_ADD_DAMAGE = 74, /// 지속시간 동안 히트되는 모든 물리적, 마법적 공격에 대해 데미지 증폭, HP회복 순간효과와 지속효과의 효율 증가한다. STATE_ADD_STATE_DAMAGE = 3071, /// 파라메터 값을 기반으로 지속데미지 증가 STATE_AMPLIFY_STATE_DAMAGE = 3072, /// 파라메터 값을 기반으로 지속데미지 증폭 STATE_NOT_CONSUMPTION_ENERGY = 3301, /// 기공 소모 스킬 사용시 기공을 소모하지 않는다. /// 2011.03.22 - prodongi STATE_ADD_STATE_TO_MY_WHEN_DEAD = 3311, /// 사망 시 자신에게 지속효과 부여 STATE_AUTO_RESURRECTION = 3321, /// 자동 부활 /// 2011.04.05 - prodongi }; enum { MILLI = 0, RANGE = 1, ALL = 99, }; enum { ET_NONE = 0, ///< 무속성 ET_FIRE = 1, ///< 화속성 ET_WATER = 2, ///< 수속성 ET_WIND = 3, ///< 풍속성 ET_EARTH = 4, ///< 토속성 ET_LIGHT = 5, ///< 명속성 ET_DARK = 6, ///< 암속성 ET_PHYSICS = 7, ///< 물리 /// 2011.03.07 - prodongi ET_ALL = 99, /// 모든 }; // 스킬 속성비트셋 정보 enum { FLAG_HELPFUL = 1 << 0, FLAG_HARMFUL = 1 << 1, FLAG_ACTIVE = 1 << 2, FLAG_PASSIVE = 1 << 3, FLAG_PHYSICAL = 1 << 4, FLAG_MAGICAL = 1 << 5, }; enum { INC_ALL_SKILL1 = 1008, INC_ALL_SKILL2 = 1009, INC_ALL_SKILL3 = 1010, INC_COOLTIME_SPEED = 10000, INC_CASTING_SPEED = 10001, INC_DOUBLE_ATTACK = 10002, RESIST_NEGATIVE = 10003, INC_SUMMON_FCM = 10004, }; // value로 부터 데이터 뽑는 함수들 -N4- void GetBitSetData( int pos, int level, double& rID, double& rValue ) { rID = fValue[pos]; rValue = GetIncreaseData(pos+1, level); }; double GetIncreaseData( int pos, int level ) { return fValue[pos] + fValue[pos+1] * (double)level; } double GetValue( int pos, int level=1 ) { return fValue[pos]*level; } enum { MAX_VALUE = 20, }; int id; ///< -- 1 int name_id; ///< -- 2 int tooltip_id; ///< -- 3 char is_harmful; ///< -- 4 int state_time_type; ///< -- 5 int state_group; ///< -- 6 int duplicate_group_1; ///< INT NOT NULL, -- 7 int duplicate_group_2; ///< INT NOT NULL, -- 8 int duplicate_group_3; ///< INT NOT NULL, -- 9 char uf_avatar; ///< -- 10 char uf_summon; ///< -- 11 char uf_monster; ///< -- 12 short reiteration_count; /// 2011.03.30 - prodongi int base_effect_id; ///< int NOT NULL, -- 13 int fire_interval; ///< int NOT NULL, -- 14 int elemental_type; ///< int NOT NULL, -- 15 float amplify_base; ///< DECIMAL(13,3) NOT NULL, -- 16 float amplify_per_skl; ///< DECIMAL(13,3) NOT NULL, -- 17 int add_damage_base; ///< int NOT NULL, -- 18 int add_damage_per_skl; ///< int NOT NULL, -- 19 int effect_type; ///< -- 20, 추가 효과 유형 double fValue[MAX_VALUE]; }; #ifdef _RDBGENTEST #pragma pack(pop) #endif struct EnhanceInfo { int nSID; enum { EF_WEAPON = 0, EF_ARMOR = 1, EF_SHIELD = 2, EF_HELM = 3, EF_GLOVE = 4, EF_BOOTS = 5, EF_BELT = 6, EF_MANTLE = 7, EF_ACCESSORY = 8, EF_SKILL = 9, }; XFlag< int > Flag; int nRank; enum { RESULT_ERASE = 1, RESULT_FAIL = 2, }; int nFailResult; int nMaxEnhance; ItemBase::ItemCode nNeedItemCode; float fPercentage[20]; }; struct _PROP_CONTACT_SCRIPT_INFO { struct _FUNCTION_LIST { enum { TRIGER_INIT = 0, TRIGER_CONTACT }; int trigger_id; std::string stdFunction; }; enum { NPC = 0, PROP, }; int prop_id; float x,y; int prop_type; int model_info; std::vector< _FUNCTION_LIST > vFunctionList; }; #pragma pack( 1 ) struct _MARKET_INFO { _MARKET_INFO( const char *_szMarketName ) : strMarketName( _szMarketName ) {} struct _MARKET_TAG { _MARKET_TAG( ItemBase::ItemCode _code, int _price ) : code( _code ), price( _price ) {} ItemBase::ItemCode code; int price; }; std::string strMarketName; std::vector< _MARKET_TAG > vItemList; }; #pragma pack()