#pragma once #include #include #include #include #include "ItemBase.h" #include "MonsterBase.h" #include "SkillBase.h" struct JobInfo { JobInfo() : skill_tree( NULL ) {}; 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, }; 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]; std::vector< SkillTree > *skill_tree; }; struct JobLevelBonus { int job_id; int strength[4]; int vital[4]; int dexterity[4]; int agility[4]; int intelligence[4]; int mentality[4]; int luck[4]; }; struct SummonLevelBonus { int id; c_fixed10 strength; c_fixed10 vitality; c_fixed10 dexterity; c_fixed10 agility; c_fixed10 intelligence; c_fixed10 mentality; c_fixed10 luck; }; struct StateInfo { enum { TYPE_NORMAL = 0, TYPE_DUPLICATE = 1, TYPE_DEPENDENCE = 2, }; enum { MAX_STATE_VALUE = 20, }; int id; int name_id; int tooltip_id; enum _ATTRIBUTE_FLAG { ERASE_ON_DEAD = (1 << 0), ERASE_ON_LOGOUT = (1 << 1), TIME_DECREASE_ON_LOGOUT = (1 << 2), NOT_ACTABLE_TO_BOSS = (1 << 3), NOT_ERASABLE = (1 << 4), ERASE_ON_REQUEST = (1 << 5), ERASE_ON_DAMAGED = (1 << 6), ERASE_ON_RESURRECT = (1 << 7), ERASE_ON_QUIT_HUNTAHOLIC = (1 << 8), ERASE_ON_QUIT_DEATHMATCH = (1 << 9), NOT_ERASABLE_ON_ENTER_DEATHMATCH = (1 << 10), NOT_ACTABLE_ON_DEATHMATCH = (1 << 11), ERASE_ON_COMPETE_START = (1 << 12), NOT_ACTABLE_IN_COMPETE = (1 << 13), ONLY_FOR_WORLD_STATE = (1 << 14), ERASE_ON_QUIT_BATTLE_ARENA = (1 << 15), ERASE_ON_STAND_UP = (1 << 16), }; bool is_harmful; int state_time_type; int state_group; int duplicate_group[3]; char uf_avatar; char uf_summon; char uf_monster; unsigned short reiteration_count; int base_effect_id; int fire_interval; int elemental_type; c_fixed10 amplify_base; c_fixed10 amplify_per_skl; int add_damage_base; int add_damage_per_skl; int effect_type; c_fixed10 fValue[ MAX_STATE_VALUE ]; // StateResource 테이블에서 로드되지 않고 서버 설정/명령어에 따라 세팅됨 bool is_log_required_on_expiration; }; 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; enum { RESULT_FAIL = 1, RESULT_SKILL_CARD_FAIL = 2, RESULT_ACCESSORY_FAIL = 3, RESULT_DO_NOTHING = 4, }; int nFailResult; int nMaxEnhance; int nLocalFlag; ItemBase::ItemCode nNeedItemCode; c_fixed10 fPercentage[25]; }; 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; }; struct SetItemEffectInfo { SetItemEffectInfo() : nSetPartID( 0 ) , pvEffectList( NULL ) { memset( nBaseType, 0, sizeof( nBaseType ) ); memset( nOptType, 0, sizeof( nOptType ) ); for( int i = 0 ; i < MAX_OPTION_NUMBER ; ++i ) { fBaseVar1[ i ].set( 0 ); fBaseVar2[ i ].set( 0 ); fOptVar1[ i ].set( 0 ); fOptVar2[ i ].set( 0 ); } } // nSetID는 SetItemEffectInfo의 벡터에서 1개만 가지고 있으면 됨(KHash의 Key로 보관) int nSetPartID; enum { MAX_OPTION_NUMBER = 4 }; short nBaseType[MAX_OPTION_NUMBER]; c_fixed10 fBaseVar1[MAX_OPTION_NUMBER]; c_fixed10 fBaseVar2[MAX_OPTION_NUMBER]; short nOptType[MAX_OPTION_NUMBER]; c_fixed10 fOptVar1[MAX_OPTION_NUMBER]; c_fixed10 fOptVar2[MAX_OPTION_NUMBER]; const std::vector< EffectInfo * > * pvEffectList; }; struct DeathmatchInfo { DeathmatchInfo( const int _id, const int _deathmatch_type, const int _min_level, const int _max_level, const std::vector< ArPosition >& vPosition ) : id( _id ) , deathmatch_type( _deathmatch_type ) , min_level( _min_level ) , max_level( _max_level ) , m_vPosition( vPosition ) { } int id; int deathmatch_type; int min_level; int max_level; std::vector< ArPosition > m_vPosition; }; struct SecretDungeonInfo { SecretDungeonInfo( const int _id, const ArPosition _position ) : id( _id ) , position( _position ) { } int id; ArPosition position; }; struct CreatureEnhanceInfo { CreatureEnhanceInfo( const float _stat_amplify, const short _card_durability, const short _slot_amount, const short _jp_addition ) : stat_amplify( _stat_amplify ) , card_durability( _card_durability ) , slot_amount( _slot_amount ) , jp_addition( _jp_addition ) { } float stat_amplify; short card_durability; short slot_amount; short jp_addition; }; struct CreatureFarmInfo { CreatureFarmInfo( const char _rate, const char _form, const char _enhance_level, const char _ticket_count ) : rate( _rate ) , form( _form ) , enhance_level( _enhance_level ) , ticket_count( _ticket_count ) { } char rate; char form; char enhance_level; char ticket_count; }; struct MonsterCreatureInfo { int nSid; int nUseCode; int arSummonCode[ GameRule::MAX_MONSTER_CREATURE_COUNT ]; }; struct SummonRandomSkillInfo { int nSid; int nUseCode; int arSummonSkillID[ GameRule::MAX_RANDOM_SKILL_COUNT ]; }; #pragma pack( 1 ) struct _MARKET_INFO { _MARKET_INFO( const char *_szMarketName ) : strMarketName( _szMarketName ) {} struct _MARKET_TAG { _MARKET_TAG( int _index, ItemBase::ItemCode _code, const StructGold& _price, const int _huntaholic_point, const int _arena_point ) : index( _index ) , code( _code ) , price( _price ) , huntaholic_point( _huntaholic_point ) , arena_point( _arena_point ) {} int index; // 상점 물품 인덱스 ItemBase::ItemCode code; // 상점 물품 아이템 코드 StructGold price; // 상점 판매가 - 루피(플레이어 입장 구매가) int huntaholic_point; // 상점 판매가 - 헌터홀릭 포인트(플레이어 입장 구매가) int arena_point; // 상점 판매가 - 아레나 포인트(플레이어 입장 구매가) }; std::string strMarketName; std::vector< _MARKET_TAG > vItemList; }; #pragma pack()