#ifndef __INC_METIN_II_GAME_CSkillManager_H__ #define __INC_METIN_II_GAME_CSkillManager_H__ #include enum ESkillFlags { SKILL_FLAG_ATTACK = (1 << 0), // °ø°Ý ±â¼ú SKILL_FLAG_USE_MELEE_DAMAGE = (1 << 1), // ±âº» ¹Ð¸® Ÿ°ÝÄ¡¸¦ b °ªÀ¸·Î »ç¿ë SKILL_FLAG_COMPUTE_ATTGRADE = (1 << 2), // °ø°Ýµî±ÞÀ» °è»êÇÑ´Ù SKILL_FLAG_SELFONLY = (1 << 3), // Àڽſ¡°Ô¸¸ ¾µ ¼ö ÀÖÀ½ SKILL_FLAG_USE_MAGIC_DAMAGE = (1 << 4), // ±âº» ¸¶¹ý Ÿ°ÝÄ¡¸¦ b °ªÀ¸·Î »ç¿ë SKILL_FLAG_USE_HP_AS_COST = (1 << 5), // HP¸¦ SP´ë½Å ¾´´Ù SKILL_FLAG_COMPUTE_MAGIC_DAMAGE = (1 << 6), SKILL_FLAG_SPLASH = (1 << 7), SKILL_FLAG_GIVE_PENALTY = (1 << 8), // ¾²°í³ª¸é Àá½Ãµ¿¾È(3ÃÊ) 2¹è µ¥¹ÌÁö¸¦ ¹Þ´Â´Ù. SKILL_FLAG_USE_ARROW_DAMAGE = (1 << 9), // ±âº» È­»ì Ÿ°ÝÄ¡¸¦ b °ªÀ¸·Î »ç¿ë SKILL_FLAG_PENETRATE = (1 << 10), // ¹æ¾î¹«½Ã SKILL_FLAG_IGNORE_TARGET_RATING = (1 << 11), // »ó´ë ·¹ÀÌÆà ¹«½Ã SKILL_FLAG_SLOW = (1 << 12), // ½½·Î¿ì °ø°Ý SKILL_FLAG_STUN = (1 << 13), // ½ºÅÏ °ø°Ý SKILL_FLAG_HP_ABSORB = (1 << 14), // HP Èí¼ö SKILL_FLAG_SP_ABSORB = (1 << 15), // SP Èí¼ö SKILL_FLAG_FIRE_CONT = (1 << 16), // FIRE Áö¼Ó µ¥¹ÌÁö SKILL_FLAG_REMOVE_BAD_AFFECT = (1 << 17), // ³ª»ÛÈ¿°ú Á¦°Å SKILL_FLAG_REMOVE_GOOD_AFFECT = (1 << 18), // ³ª»ÛÈ¿°ú Á¦°Å SKILL_FLAG_CRUSH = (1 << 19), // »ó´ë¹æÀ» ³¯¸² SKILL_FLAG_POISON = (1 << 20), // µ¶ °ø°Ý SKILL_FLAG_TOGGLE = (1 << 21), // Åä±Û SKILL_FLAG_DISABLE_BY_POINT_UP = (1 << 22), // Âï¾î¼­ ¿Ã¸± ¼ö ¾ø´Ù. SKILL_FLAG_CRUSH_LONG = (1 << 23), // »ó´ë¹æÀ» ¸Ö¸® ³¯¸² SKILL_FLAG_WIND = (1 << 24), // ¹Ù¶÷ ¼Ó¼º SKILL_FLAG_ELEC = (1 << 25), // Àü±â ¼Ó¼º SKILL_FLAG_FIRE = (1 << 26), // ºÒ ¼Ó¼º }; enum { SKILL_PENALTY_DURATION = 3, SKILL_TYPE_HORSE = 5, }; enum ESkillIndexes { SKILL_RESERVED = 0, // ¹«»ç Àü»ç °è¿­ // A SKILL_SAMYEON = 1, // »ï¿¬Âü(¼¼¹øº£±â) SKILL_PALBANG, // Æȹædz¿ì // S SKILL_JEONGWI, // Àü±ÍÈ¥ SKILL_GEOMKYUNG, // °Ë°æ SKILL_TANHWAN, // źȯ°Ý // ¹«»ç ±â°ø °è¿­ // A SKILL_GIGONGCHAM = 16, // ±â°øÂü SKILL_GYOKSAN, // °Ý»êŸ¿ì SKILL_DAEJINGAK, // ´ëÁø°¢ // S SKILL_CHUNKEON, // õ±ÙÃß SKILL_GEOMPUNG, // °Ëdz // ÀÚ°´ ¾Ï»ì °è¿­ // A SKILL_AMSEOP = 31, // ¾Ï½À SKILL_GUNGSIN, // ±Ã½Åź¿µ SKILL_CHARYUN, // Â÷·û»ì // S SKILL_EUNHYUNG, // ÀºÇü¹ý SKILL_SANGONG, // »ê°øºÐ // ÀÚ°´ ±Ã¼ö °è¿­ // A SKILL_YEONSA = 46, // ¿¬»ç SKILL_KWANKYEOK, // °ü°Ý¼ú SKILL_HWAJO, // È­Á¶ÆÄ // S SKILL_GYEONGGONG, // °æ°ø¼ú SKILL_GIGUNG, // ±â±Ã // ¼ö¶ó °Ë // A SKILL_SWAERYUNG = 61, // ¼â·ÉÁö SKILL_YONGKWON, // ¿ë±ÇÆÄ // S SKILL_GWIGEOM, // ±Í°Ë SKILL_TERROR, // °øÆ÷ SKILL_JUMAGAP, // ÁÖ¸¶°© SKILL_PABEOB, // ÆĹý¼ú // ¼ö¶ó ¸¶¹ý // A SKILL_MARYUNG = 76, // ¸¶·É SKILL_HWAYEOMPOK, // È­¿°Æø SKILL_MUYEONG, // ¹«¿µÁø // S SKILL_MANASHILED, // Èæ½Å¼öÈ£ SKILL_TUSOK, // Åõ¼Ó¸¶·É SKILL_MAHWAN, // ¸¶È¯°Ý // ¹«´ç ¿ë½Å // A SKILL_BIPABU = 91, SKILL_YONGBI, // ¿ëºñ±¤»çÆÄ SKILL_PAERYONG, // Æз泪Çѹ« // S //SKILL_BUDONG, // ºÎµ¿¹ÚºÎ SKILL_HOSIN, // È£½Å SKILL_REFLECT, // º¸È£ SKILL_GICHEON, // ±âõ´ë°ø // ¹«´ç ³ú½Å // A SKILL_NOEJEON = 106, // ³úÀü·É SKILL_BYEURAK, // º­¶ô SKILL_CHAIN, // üÀζóÀÌÆ®´× // S SKILL_JEONGEOP, // Á¤¾÷ÀÎ SKILL_KWAESOK, // À̵¿¼Óµµ¾÷ SKILL_JEUNGRYEOK, // Áõ·Â¼ú // °øÅë ½ºÅ³ // 7 SKILL_7_A_ANTI_TANHWAN = 112, SKILL_7_B_ANTI_AMSEOP, SKILL_7_C_ANTI_SWAERYUNG, SKILL_7_D_ANTI_YONGBI, // 8 SKILL_8_A_ANTI_GIGONGCHAM, SKILL_8_B_ANTI_YEONSA, SKILL_8_C_ANTI_MAHWAN, SKILL_8_D_ANTI_BYEURAK, // º¸Á¶ ½ºÅ³ SKILL_LEADERSHIP = 121, // Åë¼Ö·Â SKILL_COMBO = 122, // ¿¬°è±â SKILL_CREATE = 123, // Á¦Á¶ SKILL_MINING = 124, SKILL_LANGUAGE1 = 126, // ½Å¼ö¾î ´É·Â SKILL_LANGUAGE2 = 127, // õÁ¶¾î ´É·Â SKILL_LANGUAGE3 = 128, // Áø³ë¾î ´É·Â SKILL_POLYMORPH = 129, // µÐ°© SKILL_HORSE = 130, // ½Â¸¶ ½ºÅ³ SKILL_HORSE_SUMMON = 131, // ¸» ¼Òȯ ½ºÅ³ SKILL_HORSE_WILDATTACK = 137, // ³­¹« SKILL_HORSE_CHARGE = 138, // µ¹°Ý SKILL_HORSE_ESCAPE = 139, // Å»Ãâ SKILL_HORSE_WILDATTACK_RANGE = 140, // ³­¹«(È°) SKILL_ADD_HP = 141, // ÁõÇ÷ SKILL_RESIST_PENETRATE = 142, // öÅë GUILD_SKILL_START = 151, GUILD_SKILL_EYE = 151, GUILD_SKILL_BLOOD = 152, GUILD_SKILL_BLESS = 153, GUILD_SKILL_SEONGHWI = 154, GUILD_SKILL_ACCEL = 155, GUILD_SKILL_BUNNO = 156, GUILD_SKILL_JUMUN = 157, GUILD_SKILL_TELEPORT = 158, GUILD_SKILL_DOOR = 159, GUILD_SKILL_END = 162, GUILD_SKILL_COUNT = GUILD_SKILL_END - GUILD_SKILL_START + 1, }; class CSkillProto { public: char szName[64]; DWORD dwVnum; // ¹øÈ£ DWORD dwType; // 0: ÀüÁ÷¾÷, 1: ¹«»ç, 2: ÀÚ°´, 3: ¼ö¶ó, 4: ¹«´ç BYTE bMaxLevel; // ÃÖ´ë ¼ö·Ãµµ BYTE bLevelLimit; // ·¹º§Á¦ÇÑ int iSplashRange; // ½ºÇ÷¡½¬ °Å¸® Á¦ÇÑ BYTE bPointOn; // ¾îµð¿¡ °á°ú°ªÀ» Àû¿ë ½ÃÅ°´Â°¡? (Ÿ°ÝÄ¡, MAX HP, HP REGEN µîµîµî) CPoly kPointPoly; // °á°ú°ª ¸¸µå´Â °ø½Ä CPoly kSPCostPoly; // »ç¿ë SP °ø½Ä CPoly kDurationPoly; // Áö¼Ó ½Ã°£ °ø½Ä CPoly kDurationSPCostPoly; // Áö¼Ó SP °ø½Ä CPoly kCooldownPoly; // Äð´Ù¿î ½Ã°£ °ø½Ä CPoly kMasterBonusPoly; // ¸¶½ºÅÍÀÏ ¶§ º¸³Ê½º °ø½Ä CPoly kSplashAroundDamageAdjustPoly; // ½ºÇ÷¡½¬ °ø°ÝÀÏ °æ¿ì ÁÖÀ§ Àû¿¡°Ô ÀÔÈ÷´Â µ¥¹ÌÁö °¨¼Ò ºñÀ² DWORD dwFlag; // ½ºÅ³¿É¼Ç DWORD dwAffectFlag; // ½ºÅ³¿¡ ¸ÂÀº °æ¿ì Àû¿ëµÇ´Â Affect BYTE bLevelStep; // Çѹø¿¡ ¿Ã¸®´Âµ¥ ÇÊ¿äÇÑ ½ºÅ³ Æ÷ÀÎÆ® ¼ö DWORD preSkillVnum; // ¹è¿ì´Âµ¥ ÇÊ¿äÇÑ ÀÌÀü¿¡ ¹è¿ö¾ßÇÒ ½ºÅ³ BYTE preSkillLevel; // ÀÌÀü¿¡ ¹è¿ö¾ßÇÒ ½ºÅ³ÀÇ ·¹º§ long lMaxHit; BYTE bSkillAttrType; // 2Â÷ Àû¿ë BYTE bPointOn2; CPoly kPointPoly2; CPoly kDurationPoly2; DWORD dwFlag2; DWORD dwAffectFlag2; DWORD dwTargetRange; bool IsChargeSkill() { return dwVnum == SKILL_TANHWAN || dwVnum == SKILL_HORSE_CHARGE; } // 3Â÷ Àû¿ë BYTE bPointOn3; CPoly kPointPoly3; CPoly kDurationPoly3; CPoly kGrandMasterAddSPCostPoly; void SetPointVar(const std::string& strName, double dVar); void SetDurationVar(const std::string& strName, double dVar); void SetSPCostVar(const std::string& strName, double dVar); }; class CSkillManager : public singleton { public: CSkillManager(); virtual ~CSkillManager(); bool Initialize(TSkillTable * pTab, int iSize); CSkillProto * Get(DWORD dwVnum); CSkillProto * Get(const char * c_pszSkillName); protected: std::map m_map_pkSkillProto; }; #endif