#pragma once #include "../gamelib/RaceData.h" #include "../gamelib/ActorInstance.h" #ifdef ENABLE_SASH_SYSTEM #include "../eterlib/GrpObjectInstance.h" #endif #include "AffectFlagContainer.h" class CInstanceBase { public: struct SCreateData { BYTE m_bType; DWORD m_dwStateFlags; DWORD m_dwEmpireID; DWORD m_dwGuildID; DWORD m_dwLevel; #if defined(WJ_SHOW_MOB_INFO) DWORD m_dwAIFlag; #endif DWORD m_dwVID; DWORD m_dwRace; DWORD m_dwMovSpd; DWORD m_dwAtkSpd; LONG m_lPosX; LONG m_lPosY; FLOAT m_fRot; DWORD m_dwArmor; DWORD m_dwWeapon; DWORD m_dwHair; //DWORD m_dwAcce; #ifdef ENABLE_SASH_SYSTEM DWORD m_dwSash; #endif #ifdef WJ_QUIVER_SYSTEM DWORD m_dwArrowType; #endif DWORD m_dwMountVnum; BYTE m_dwNewIsGuildName; DWORD m_dwWeaponEvolution; short m_sAlignment; #ifdef ENABLE_TITLE_SYSTEM short m_sPrestige; #endif #ifdef ENABLE_REBORN_SYSTEM short m_sReborn; #endif BYTE m_byPKMode; #if defined(WJ_COMBAT_ZONE) BYTE combat_zone_rank; DWORD combat_zone_points; #endif //DWORD m_dwCostumEvo; CAffectFlagContainer m_kAffectFlags; std::string m_stName; bool m_isMain; }; public: typedef DWORD TType; enum EMobAIFlags { AIFLAG_AGGRESSIVE = (1 << 0), AIFLAG_NOMOVE = (1 << 1), AIFLAG_COWARD = (1 << 2), AIFLAG_NOATTACKSHINSU = (1 << 3), AIFLAG_NOATTACKJINNO = (1 << 4), AIFLAG_NOATTACKCHUNJO = (1 << 5), AIFLAG_ATTACKMOB = (1 << 6), AIFLAG_BERSERK = (1 << 7), AIFLAG_STONESKIN = (1 << 8), AIFLAG_GODSPEED = (1 << 9), AIFLAG_DEATHBLOW = (1 << 10), AIFLAG_REVIVE = (1 << 11), }; enum EDirection { DIR_NORTH, DIR_NORTHEAST, DIR_EAST, DIR_SOUTHEAST, DIR_SOUTH, DIR_SOUTHWEST, DIR_WEST, DIR_NORTHWEST, DIR_MAX_NUM, }; enum { FUNC_WAIT, FUNC_MOVE, FUNC_ATTACK, FUNC_COMBO, FUNC_MOB_SKILL, FUNC_EMOTION, FUNC_SKILL = 0x80, }; enum { AFFECT_YMIR, AFFECT_INVISIBILITY, AFFECT_SPAWN, AFFECT_POISON, AFFECT_SLOW, AFFECT_STUN, AFFECT_DUNGEON_READY, // ´øÀü¿¡¼­ Áغñ »óÅ AFFECT_SHOW_ALWAYS, // AFFECT_DUNGEON_UNIQUE ¿¡¼­ º¯°æ(Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ÄøµµÇÁö¾ÊÀ½) AFFECT_BUILDING_CONSTRUCTION_SMALL, AFFECT_BUILDING_CONSTRUCTION_LARGE, AFFECT_BUILDING_UPGRADE, AFFECT_MOV_SPEED_POTION, // 11 AFFECT_ATT_SPEED_POTION, // 12 AFFECT_FISH_MIND, // 13 AFFECT_JEONGWI, // 14 Àü±ÍÈ¥ AFFECT_GEOMGYEONG, // 15 °Ë°æ AFFECT_CHEONGEUN, // 16 õ±ÙÃß AFFECT_GYEONGGONG, // 17 °æ°ø¼ú AFFECT_EUNHYEONG, // 18 ÀºÇü¹ý AFFECT_GWIGEOM, // 19 ±Í°Ë AFFECT_GONGPO, // 20 °øÆ÷ AFFECT_JUMAGAP, // 21 ÁÖ¸¶°© AFFECT_HOSIN, // 22 È£½Å AFFECT_BOHO, // 23 º¸È£ AFFECT_KWAESOK, // 24 Äè¼Ó AFFECT_HEUKSIN, // 25 Èæ½Å¼öÈ£ AFFECT_MUYEONG, // 26 ¹«¿µÁø AFFECT_REVIVE_INVISIBILITY, // 27 ºÎȰ ¹«Àû AFFECT_FIRE, // 28 Áö¼Ó ºÒ AFFECT_GICHEON, // 29 ±âõ ´ë°ø AFFECT_JEUNGRYEOK, // 30 Áõ·Â¼ú AFFECT_DASH, // 31 ´ë½¬ AFFECT_PABEOP, // 32 ÆÄ¹ý¼ú AFFECT_FALLEN_CHEONGEUN, // 33 ´Ù¿î ±×·¹À̵å õ±ÙÃß AFFECT_POLYMORPH, // 34 Æú¸®¸ðÇÁ AFFECT_WAR_FLAG1, // 35 AFFECT_WAR_FLAG2, // 36 AFFECT_WAR_FLAG3, // 37 AFFECT_CHINA_FIREWORK, // 38 AFFECT_PREMIUM_SILVER, // 39 AFFECT_PREMIUM_GOLD, // 40 AFFECT_RAMADAN_RING, // 41 ÃÊ½Â´Þ ¹ÝÁö Âø¿ë Affect AFFECT_BLEEDING, // 42 AFFECT_RED_POSSESION, // 43 AFFECT_BLUE_POSSESION, // 44 AFFECT_JEOKRANG, // 45 AFFECT_CHEONGRANG, // 46 //AFFECT_ACCE, // 47 #ifdef ENABLE_MELEY_LAIR_DUNGEON AFFECT_STATUE1, AFFECT_STATUE2, AFFECT_STATUE3, AFFECT_STATUE4, #endif #ifdef DRAGON_SOUL_ACTIVE_EFFECT AFFECT_DS, #endif #ifdef ENABLE_GM_AFFECTS AFFECT_YMIR_MOD, AFFECT_YMIR_SGM, AFFECT_YMIR_GA, #endif AFFECT_NUM = 64, AFFECT_HWAYEOM = AFFECT_GEOMGYEONG, }; enum { NEW_AFFECT_MOV_SPEED = 200, NEW_AFFECT_ATT_SPEED, NEW_AFFECT_ATT_GRADE, NEW_AFFECT_INVISIBILITY, NEW_AFFECT_STR, NEW_AFFECT_DEX, // 205 NEW_AFFECT_CON, NEW_AFFECT_INT, NEW_AFFECT_FISH_MIND_PILL, NEW_AFFECT_POISON, NEW_AFFECT_STUN, // 210 NEW_AFFECT_SLOW, NEW_AFFECT_DUNGEON_READY, NEW_AFFECT_DUNGEON_UNIQUE, NEW_AFFECT_BUILDING, NEW_AFFECT_REVIVE_INVISIBLE, // 215 NEW_AFFECT_FIRE, NEW_AFFECT_CAST_SPEED, NEW_AFFECT_HP_RECOVER_CONTINUE, NEW_AFFECT_SP_RECOVER_CONTINUE, NEW_AFFECT_POLYMORPH, // 220 NEW_AFFECT_MOUNT, NEW_AFFECT_WAR_FLAG, // 222 NEW_AFFECT_BLOCK_CHAT, // 223 NEW_AFFECT_CHINA_FIREWORK, NEW_AFFECT_BOW_DISTANCE, // 225 NEW_AFFECT_EXP_BONUS = 500, // °æÇèÀÇ ¹ÝÁö NEW_AFFECT_ITEM_BONUS = 501, // µµµÏÀÇ Àå°© NEW_AFFECT_SAFEBOX = 502, // PREMIUM_SAFEBOX, NEW_AFFECT_AUTOLOOT = 503, // PREMIUM_AUTOLOOT, NEW_AFFECT_FISH_MIND = 504, // PREMIUM_FISH_MIND, NEW_AFFECT_MARRIAGE_FAST = 505, // ¿ø¾ÓÀÇ ±êÅÐ (±Ý½½), NEW_AFFECT_GOLD_BONUS = 506, NEW_AFFECT_MALL = 510, // ¸ô ¾ÆÀÌÅÛ ¿¡ÆåÆ® NEW_AFFECT_NO_DEATH_PENALTY = 511, // ¿ë½ÅÀÇ °¡È£ (°æÇèÄ¡ ÆÐ³ÎƼ¸¦ Çѹø ¸·¾ÆÁØ´Ù) NEW_AFFECT_SKILL_BOOK_BONUS = 512, // ¼±ÀÎÀÇ ±³ÈÆ (Ã¥ ¼ö·Ã ¼º°ø È®·üÀÌ 50% Áõ°¡) NEW_AFFECT_SKILL_BOOK_NO_DELAY = 513, // ÁÖ¾È ¼ú¼­ (Ã¥ ¼ö·Ã µô·¹ÀÌ ¾øÀ½) NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // °æÇèÀÇ ¹ÝÁö (À¯·´ ¹öÀü 14 ·¹º§ ÀÌÇÏ ±âº» È¿°ú) NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517, NEW_AFFECT_AUTO_HP_RECOVERY = 534, // ÀÚµ¿¹°¾à HP NEW_AFFECT_AUTO_SP_RECOVERY = 535, // ÀÚµ¿¹°¾à SP NEW_AFFECT_DRAGON_SOUL_QUALIFIED = 540, NEW_AFFECT_DRAGON_SOUL_DECK1 = 541, NEW_AFFECT_DRAGON_SOUL_DECK2 = 542, NEW_AFFECT_RAMADAN_ABILITY = 300, NEW_AFFECT_RAMADAN_RING = 301, // ¶ó¸¶´Ü À̺¥Æ®¿ë Ư¼ö¾ÆÀÌÅÛ Ãʽ´ÞÀÇ ¹ÝÁö Âø¿ë À¯¹« NEW_AFFECT_NOG_POCKET_ABILITY = 302, #ifdef ENABLE_NEW_AFFECT_POTION AFFECT_POTION_1 = 303, AFFECT_POTION_2 = 304, AFFECT_POTION_3 = 305, AFFECT_POTION_4 = 306, AFFECT_POTION_5 = 307, AFFECT_POTION_6 = 308, #endif NEW_AFFECT_BLEEDING = 309, NEW_AFFECT_QUEST_START_IDX = 1000, }; enum { STONE_SMOKE1 = 0, // 99% STONE_SMOKE2 = 1, // 85% STONE_SMOKE3 = 2, // 80% STONE_SMOKE4 = 3, // 60% STONE_SMOKE5 = 4, // 45% STONE_SMOKE6 = 5, // 40% STONE_SMOKE7 = 6, // 20% STONE_SMOKE8 = 7, // 10% STONE_SMOKE_NUM = 4, }; enum EBuildingAffect { BUILDING_CONSTRUCTION_SMALL = 0, BUILDING_CONSTRUCTION_LARGE = 1, BUILDING_UPGRADE = 2, }; enum { WEAPON_DUALHAND, WEAPON_ONEHAND, WEAPON_TWOHAND, WEAPON_NUM, }; enum { EMPIRE_NONE, EMPIRE_A, EMPIRE_B, EMPIRE_C, EMPIRE_NUM, }; enum { NAMECOLOR_MOB, NAMECOLOR_NPC, NAMECOLOR_PC, NAMECOLOR_PC_END = NAMECOLOR_PC + EMPIRE_NUM, NAMECOLOR_NORMAL_MOB, NAMECOLOR_NORMAL_NPC, NAMECOLOR_NORMAL_PC, NAMECOLOR_NORMAL_PC_END = NAMECOLOR_NORMAL_PC + EMPIRE_NUM, NAMECOLOR_EMPIRE_MOB, NAMECOLOR_EMPIRE_NPC, NAMECOLOR_EMPIRE_PC, NAMECOLOR_EMPIRE_PC_END = NAMECOLOR_EMPIRE_PC + EMPIRE_NUM, NAMECOLOR_FUNC, NAMECOLOR_PK, NAMECOLOR_PVP, NAMECOLOR_PARTY, NAMECOLOR_WARP, NAMECOLOR_WAYPOINT, #ifdef TOURNAMENT_PVP_SYSTEM NAMECOLOR_TOURNAMENT_TEAM_A, NAMECOLOR_TOURNAMENT_TEAM_B, #endif NAMECOLOR_METIN, NAMECOLOR_OFFLINESHOP, NAMECOLOR_SUPPORT, NAMECOLOR_EXTRA = NAMECOLOR_FUNC + 10, NAMECOLOR_NUM = NAMECOLOR_EXTRA + 10, }; enum { ALIGNMENT_TYPE_WHITE, ALIGNMENT_TYPE_NORMAL, ALIGNMENT_TYPE_DARK, }; enum { EMOTICON_EXCLAMATION = 1, EMOTICON_FISH = 11, EMOTICON_NUM = 128, #ifdef ENABLE_TITLE_SYSTEM TITLE_NUM_PRESTIGE = 20, TITLE_NONE_PRESTIGE = 19, #endif #ifdef ENABLE_REBORN_SYSTEM TITLE_NUM_REBORN = 5, TITLE_NONE_REBORN = 3, #endif TITLE_NUM = 9, TITLE_NONE = 4, }; enum //¾Æ·¡ ¹øÈ£°¡ ¹Ù²î¸é registerEffect Âʵµ ¹Ù²Ù¾î Áà¾ß ÇÑ´Ù. { EFFECT_REFINED_NONE, EFFECT_SWORD_REFINED7, EFFECT_SWORD_REFINED8, EFFECT_SWORD_REFINED9, EFFECT_BOW_REFINED7, EFFECT_BOW_REFINED8, EFFECT_BOW_REFINED9, EFFECT_FANBELL_REFINED7, EFFECT_FANBELL_REFINED8, EFFECT_FANBELL_REFINED9, EFFECT_SMALLSWORD_REFINED7, EFFECT_SMALLSWORD_REFINED8, EFFECT_SMALLSWORD_REFINED9, EFFECT_SMALLSWORD_REFINED7_LEFT, EFFECT_SMALLSWORD_REFINED8_LEFT, EFFECT_SMALLSWORD_REFINED9_LEFT, EFFECT_BODYARMOR_REFINED7, EFFECT_BODYARMOR_REFINED8, EFFECT_BODYARMOR_REFINED9, EFFECT_BODYARMOR_SPECIAL, // °©¿Ê 4-2-1 EFFECT_BODYARMOR_SPECIAL2, // °©¿Ê 4-2-2 #ifdef VERSION_162_ENABLED EFFECT_BODYARMOR_SPECIAL3, #endif #ifdef ENABLE_SASH_SYSTEM EFFECT_SASH, #endif EFFECT_BODYARMOR_NEW_DEAMON, EFFECT_COSTUMEBODY_SPECIAL, EFFECT_COSTUMEBODY_SPECIAL2, EFFECT_COSTUMEBODY_SPECIAL3, EFFECT_COSTUMEBODY_SPECIAL4, EFFECT_COSTUMEBODY_SPECIAL5, EFFECT_BODYARMOR_ELECTRIC, EFFECT_SWORD_EVOLUTION1, EFFECT_SWORD_EVOLUTION2, EFFECT_SWORD_EVOLUTION3, EFFECT_SWORD_EVOLUTION4, EFFECT_BOW_EVOLUTION1, EFFECT_BOW_EVOLUTION2, EFFECT_BOW_EVOLUTION3, EFFECT_BOW_EVOLUTION4, EFFECT_FANBELL_EVOLUTION1, EFFECT_FANBELL_EVOLUTION2, EFFECT_FANBELL_EVOLUTION3, EFFECT_FANBELL_EVOLUTION4, EFFECT_SMALLSWORD_EVOLUTION1, EFFECT_SMALLSWORD_EVOLUTION2, EFFECT_SMALLSWORD_EVOLUTION3, EFFECT_SMALLSWORD_EVOLUTION4, EFFECT_SMALLSWORD_EVOLUTION1_LEFT, EFFECT_SMALLSWORD_EVOLUTION2_LEFT, EFFECT_SMALLSWORD_EVOLUTION3_LEFT, EFFECT_SMALLSWORD_EVOLUTION4_LEFT, EFFECT_CLAW_EVOLUTION1, EFFECT_CLAW_EVOLUTION2, EFFECT_CLAW_EVOLUTION3, EFFECT_CLAW_EVOLUTION4, EFFECT_CLAW_EVOLUTION1_LEFT, EFFECT_CLAW_EVOLUTION2_LEFT, EFFECT_CLAW_EVOLUTION3_LEFT, EFFECT_CLAW_EVOLUTION4_LEFT, EFFECT_CLAW_REFINED7, EFFECT_CLAW_REFINED8, EFFECT_CLAW_REFINED9, EFFECT_CLAW_REFINED7_LEFT, EFFECT_CLAW_REFINED8_LEFT, EFFECT_CLAW_REFINED9_LEFT, //EFFECT_YOUTUBER, EFFECT_COSTUME_YOUTUBER, EFFECT_COSTUME_TWITCH, /*EFFECT_COSTUME_SYSTEM_SPECIAL1, EFFECT_COSTUME_SYSTEM_SPECIAL2, EFFECT_COSTUME_SYSTEM_SPECIAL3, EFFECT_COSTUME_SYSTEM_SPECIAL4, EFFECT_COSTUME_SYSTEM_SPECIAL5, EFFECT_COSTUME_SYSTEM_SPECIAL6, EFFECT_COSTUME_SYSTEM_SPECIAL7,*/ EFFECT_REFINED_NUM, }; enum DamageFlag { DAMAGE_NORMAL = (1<<0), DAMAGE_POISON = (1<<1), DAMAGE_DODGE = (1<<2), DAMAGE_BLOCK = (1<<3), DAMAGE_PENETRATE= (1<<4), DAMAGE_CRITICAL = (1<<5), DAMAGE_BLEEDING = (1 << 6), DAMAGE_FIRE = (1 << 7), // ¹Ý-_-»ç }; enum { EFFECT_DUST, EFFECT_STUN, EFFECT_HIT, EFFECT_FLAME_ATTACK, EFFECT_FLAME_HIT, EFFECT_FLAME_ATTACH, EFFECT_ELECTRIC_ATTACK, EFFECT_ELECTRIC_HIT, EFFECT_ELECTRIC_ATTACH, EFFECT_SPAWN_APPEAR, EFFECT_SPAWN_DISAPPEAR, EFFECT_LEVELUP, EFFECT_SKILLUP, EFFECT_HPUP_RED, EFFECT_SPUP_BLUE, EFFECT_SPEEDUP_GREEN, EFFECT_DXUP_PURPLE, EFFECT_CRITICAL, EFFECT_PENETRATE, EFFECT_BLOCK, EFFECT_DODGE, EFFECT_FIRECRACKER, EFFECT_SPIN_TOP, EFFECT_WEAPON, EFFECT_WEAPON_END = EFFECT_WEAPON + WEAPON_NUM, EFFECT_AFFECT, EFFECT_AFFECT_GYEONGGONG = EFFECT_AFFECT + AFFECT_GYEONGGONG, EFFECT_AFFECT_KWAESOK = EFFECT_AFFECT + AFFECT_KWAESOK, EFFECT_AFFECT_END = EFFECT_AFFECT + AFFECT_NUM, EFFECT_EMOTICON, EFFECT_EMOTICON_END = EFFECT_EMOTICON + EMOTICON_NUM, EFFECT_MONSTER, EFFECT_STONE, EFFECT_SHINSOO, EFFECT_CHUNJO, EFFECT_JINNOS, EFFECT_TARGET_SHINSOO, EFFECT_TARGET_JINNOS, EFFECT_TARGET_CHUNJO, EFFECT_TARGET_MONSTER, EFFECT_TARGET_STONE, EFFECT_SELECT, EFFECT_TARGET, EFFECT_EMPIRE, EFFECT_EMPIRE_END = EFFECT_EMPIRE + EMPIRE_NUM, EFFECT_HORSE_DUST, EFFECT_REFINED, EFFECT_REFINED_END = EFFECT_REFINED + EFFECT_REFINED_NUM, EFFECT_DAMAGE_TARGET, EFFECT_DAMAGE_NOT_TARGET, EFFECT_DAMAGE_SELFDAMAGE, EFFECT_DAMAGE_SELFDAMAGE2, EFFECT_DAMAGE_POISON, EFFECT_DAMAGE_MISS, EFFECT_DAMAGE_TARGETMISS, EFFECT_DAMAGE_CRITICAL, EFFECT_SUCCESS, EFFECT_FAIL, EFFECT_FR_SUCCESS, EFFECT_LEVELUP_ON_14_FOR_GERMANY, //·¹º§¾÷ 14À϶§ ( µ¶ÀÏÀü¿ë ) EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,//·¹º§¾÷ 15À϶§ ( µ¶ÀÏÀü¿ë ) EFFECT_PERCENT_DAMAGE1, EFFECT_PERCENT_DAMAGE2, EFFECT_PERCENT_DAMAGE3, EFFECT_AUTO_HPUP, EFFECT_AUTO_SPUP, EFFECT_RAMADAN_RING_EQUIP, // ÃÊ½Â´Þ ¹ÝÁö Âø¿ë ¼ø°£¿¡ ¹ßµ¿ÇÏ´Â ÀÌÆåÆ® EFFECT_HALLOWEEN_CANDY_EQUIP, // ÇÒ·ÎÀ© »çÅÁ Âø¿ë ¼ø°£¿¡ ¹ßµ¿ÇÏ´Â ÀÌÆåÆ® EFFECT_HAPPINESS_RING_EQUIP, // ÇູÀÇ ¹ÝÁö Âø¿ë ¼ø°£¿¡ ¹ßµ¿ÇÏ´Â ÀÌÆåÆ® EFFECT_LOVE_PENDANT_EQUIP, // ÇູÀÇ ¹ÝÁö Âø¿ë ¼ø°£¿¡ ¹ßµ¿ÇÏ´Â ÀÌÆåÆ® #ifdef VERSION_162_ENABLED EFFECT_HEALER, #endif EFFECT_EQUIP_RUZGAR, EFFECT_DUEL_VICTIM, EFFECT_DUEL_KILLER, EFFECT_DUEL_SENDER, EFFECT_DUEL_RECEIVER, EFFECT_DUEL_5, EFFECT_DUEL_4, EFFECT_DUEL_3, EFFECT_DUEL_2, EFFECT_DUEL_1, EFFECT_DUEL_0, #ifdef ENABLE_SASH_SYSTEM EFFECT_SASH_SUCCEDED, EFFECT_SASH_EQUIP, #endif EFFECT_TEMP, #ifdef ENABLE_MOUNT_SYSTEM EFFECT_MOUNT_1, EFFECT_MOUNT_2, EFFECT_MOUNT_3, EFFECT_MOUNT_4, EFFECT_MOUNT_5, EFFECT_MOUNT_6, EFFECT_MOUNT_7, EFFECT_MOUNT_8, EFFECT_MOUNT_9, EFFECT_MOUNT_10, EFFECT_MOUNT_11, EFFECT_MOUNT_12, EFFECT_MOUNT_13, EFFECT_MOUNT_14, EFFECT_MOUNT_15, EFFECT_MOUNT_16, EFFECT_MOUNT_17, EFFECT_MOUNT_18, EFFECT_MOUNT_19, EFFECT_MOUNT_20, EFFECT_MOUNT_21, EFFECT_MOUNT_22, EFFECT_MOUNT_23, EFFECT_MOUNT_24, EFFECT_MOUNT_25, EFFECT_MOUNT_26, EFFECT_MOUNT_27, EFFECT_MOUNT_28, EFFECT_MOUNT_29, EFFECT_MOUNT_30, EFFECT_MOUNT_31, EFFECT_MOUNT_32, EFFECT_MOUNT_33, EFFECT_MOUNT_34, EFFECT_MOUNT_35, EFFECT_MOUNT_36, EFFECT_MOUNT_37, EFFECT_MOUNT_38, EFFECT_MOUNT_39, EFFECT_MOUNT_40, EFFECT_MOUNT_41, EFFECT_MOUNT_42, EFFECT_MOUNT_43, EFFECT_MOUNT_44, EFFECT_MOUNT_45, EFFECT_MOUNT_46, EFFECT_MOUNT_47, EFFECT_MOUNT_48, EFFECT_MOUNT_49, EFFECT_MOUNT_50, EFFECT_MOUNT_51, EFFECT_MOUNT_52, EFFECT_MOUNT_53, EFFECT_MOUNT_54, EFFECT_MOUNT_55, EFFECT_MOUNT_56, EFFECT_MOUNT_57, EFFECT_MOUNT_58, EFFECT_MOUNT_59, EFFECT_MOUNT_60, EFFECT_MOUNT_61, #endif EFFECT_DAMAGE_BLEEDING, EFFECT_DAMAGE_FIRE, #if defined(WJ_COMBAT_ZONE) EFFECT_COMBAT_ZONE_POTION, #endif EFEKT_BOSSA, #ifdef ENABLE_AGGREGATE_MONSTER_EFFECT EFFECT_AGGREGATE_MONSTER, #endif EFFECT_NUM, }; enum { DUEL_NONE, DUEL_CANNOTATTACK, DUEL_START, }; public: static void DestroySystem(); static void CreateSystem(UINT uCapacity); static bool RegisterEffect(UINT eEftType, const char* c_szEftAttachBone, const char* c_szEftName, bool isCache); static void RegisterTitleName(int iIndex, const char * c_szTitleName); #ifdef ENABLE_TITLE_SYSTEM static void RegisterTitlePrestigeName(int iIndex, const char * c_szTitlePrestigeName); #endif #ifdef ENABLE_REBORN_SYSTEM static void RegisterTitleRebornName(int iIndex, const char * c_szTitleRebornName); #endif static bool RegisterNameColor(UINT uIndex, UINT r, UINT g, UINT b); static bool RegisterTitleColor(UINT uIndex, UINT r, UINT g, UINT b); #ifdef ENABLE_TITLE_SYSTEM static bool RegisterTitlePrestigeColor(UINT uIndex, UINT r, UINT g, UINT b); #endif #ifdef ENABLE_REBORN_SYSTEM static bool RegisterTitleRebornColor(UINT uIndex, UINT r, UINT g, UINT b); #endif static bool ChangeEffectTexture(UINT eEftType, const char* c_szSrcFileName, const char* c_szDstFileName); static void SetDustGap(float fDustGap); static void SetHorseDustGap(float fDustGap); static void SetEmpireNameMode(bool isEnable); static const D3DXCOLOR& GetIndexedNameColor(UINT eNameColor); public: void SetMainInstance(); void OnSelected(); void OnUnselected(); void OnTargeted(); void OnUntargeted(); protected: bool __IsExistMainInstance(); bool __IsMainInstance(); bool __MainCanSeeHiddenThing(); float __GetBowRange(); protected: DWORD __AttachEffect(UINT eEftType); DWORD __AttachEffect(char filename[128]); void __DetachEffect(DWORD dwEID); public: void CreateSpecialEffect(DWORD iEffectIndex); void AttachSpecialEffect(DWORD effect); protected: static std::string ms_astAffectEffectAttachBone[EFFECT_NUM]; static DWORD ms_adwCRCAffectEffect[EFFECT_NUM]; static float ms_fDustGap; static float ms_fHorseDustGap; public: CInstanceBase(); virtual ~CInstanceBase(); bool LessRenderOrder(CInstanceBase* pkInst); void MountHorse(UINT eRace); void DismountHorse(); // ½ºÅ©¸³Æ®¿ë Å×½ºÆ® ÇÔ¼ö. ³ªÁß¿¡ ¾ø¿¡ÀÚ void SCRIPT_SetAffect(UINT eAffect, bool isVisible); float CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst); // Instance Data bool IsFlyTargetObject(); void ClearFlyTargetInstance(); void SetFlyTargetInstance(CInstanceBase& rkInstDst); void AddFlyTargetInstance(CInstanceBase& rkInstDst); void AddFlyTargetPosition(const TPixelPosition& c_rkPPosDst); float GetFlyTargetDistance(); void SetAlpha(float fAlpha); void DeleteBlendOut(); void AttachTextTail(); void DetachTextTail(); void UpdateTextTailLevel(DWORD level); void RefreshTextTail(); void RefreshTextTailTitle(); bool Create(const SCreateData& c_rkCreateData); bool CreateDeviceObjects(); void DestroyDeviceObjects(); void Destroy(); void Update(); bool UpdateDeleting(); void Transform(); void Deform(); void Render(); void RenderTrace(); void RenderToShadowMap(); void RenderCollision(); void RegisterBoundingSphere(); // Temporary void GetBoundBox(D3DXVECTOR3 * vtMin, D3DXVECTOR3 * vtMax); void SetNameString(const char* c_szName, int len); bool SetRace(DWORD dwRaceIndex); void SetVirtualID(DWORD wVirtualNumber); void SetVirtualNumber(DWORD dwVirtualNumber); void SetInstanceType(int iInstanceType); void SetAlignment(short sAlignment); #ifdef ENABLE_TITLE_SYSTEM void SetPrestige(short sPrestige); #endif #ifdef ENABLE_REBORN_SYSTEM void SetReborn(short sReborn); #endif void SetLevelText(int mLevel); void SetLevel(DWORD level); void SetPKMode(BYTE byPKMode); void SetKiller(bool bFlag); void SetPartyMemberFlag(bool bFlag); void SetStateFlags(DWORD dwStateFlags); void SetArmor(DWORD dwArmor); void SetShape(DWORD eShape, float fSpecular=0.0f); void SetHair(DWORD eHair); /*void SetAcce(DWORD eAcce); void ChangeAcce(DWORD eAcce);*/ #ifdef ENABLE_SASH_SYSTEM void SetSash(DWORD dwSash); void ChangeSash(DWORD dwSash); #endif bool SetWeapon(DWORD eWeapon, DWORD dwEvolution, DWORD eArrow = 0); void SetWeaponEvolution(DWORD dwEvolution); //void SetCostumEvo(DWORD dwCostumEvo); bool ChangeArmor(DWORD dwArmor); void ChangeWeapon(DWORD eWeapon, DWORD dwEvolution, DWORD eArrow = 0); void ChangeHair(DWORD eHair); void ChangeGuild(DWORD dwGuildID, DWORD dwNewIsGuildName); DWORD GetWeaponType(); void SetComboType(UINT uComboType); void SetAttackSpeed(UINT uAtkSpd); void SetMoveSpeed(UINT uMovSpd); void SetRotationSpeed(float fRotSpd); const char * GetNameString(); #if defined(WJ_COMBAT_ZONE) bool IsCombatZoneMap(); void SetCombatZonePoints(DWORD dwValue); DWORD GetCombatZonePoints(); void SetCombatZoneRank(BYTE bValue); BYTE GetCombatZoneRank(); #endif int GetInstanceType(); #ifdef ENABLE_NEW_EXCHANGE_WINDOW DWORD GetLevel(); #endif DWORD GetPart(CRaceData::EParts part); DWORD GetShape(); DWORD GetRace(); DWORD GetVirtualID(); DWORD GetVirtualNumber(); DWORD GetEmpireID(); DWORD GetGuildID(); #ifdef WJ_SHOW_MOB_INFO DWORD GetAIFlag(); #endif BYTE GetNewIsGuildName(); int GetAlignment(); UINT GetAlignmentGrade(); int GetAlignmentType(); #ifdef ENABLE_TITLE_SYSTEM int GetPrestige(); UINT GetPrestigeGrade(); #endif #ifdef ENABLE_REBORN_SYSTEM int GetReborn(); UINT GetRebornGrade(); #endif BYTE GetPKMode(); bool IsKiller(); bool IsPartyMember(); #ifdef TOURNAMENT_PVP_SYSTEM bool IsTournamentMap(); #endif void ActDualEmotion(CInstanceBase & rkDstInst, WORD dwMotionNumber1, WORD dwMotionNumber2); void ActEmotion(DWORD dwMotionNumber); void LevelUp(); void SkillUp(); void UseSpinTop(); void Revive(); void Stun(); void Die(); void Hide(); void Show(); bool CanAct(); bool CanMove(); bool CanAttack(); bool CanUseSkill(); bool CanFishing(); bool IsConflictAlignmentInstance(CInstanceBase& rkInstVictim); bool IsAttackableInstance(CInstanceBase& rkInstVictim); bool IsTargetableInstance(CInstanceBase& rkInstVictim); bool IsPVPInstance(CInstanceBase& rkInstVictim); bool CanChangeTarget(); bool CanPickInstance(); bool CanViewTargetHP(CInstanceBase& rkInstVictim); // Movement BOOL IsGoing(); bool NEW_Goto(const TPixelPosition& c_rkPPosDst, float fDstRot); void EndGoing(); void SetRunMode(); void SetWalkMode(); bool IsAffect(UINT uAffect); BOOL IsInvisibility(); BOOL IsParalysis(); BOOL IsGameMaster(); BOOL IsSameEmpire(CInstanceBase& rkInstDst); BOOL IsBowMode(); BOOL IsHandMode(); BOOL IsFishingMode(); BOOL IsFishing(); BOOL IsWearingDress(); BOOL IsHoldingPickAxe(); BOOL IsMountingHorse(); BOOL IsNewMount(); BOOL IsForceVisible(); BOOL IsInSafe(); #ifdef NEW_PET_SYSTEM BOOL IsNewPet(); #endif BOOL IsEnemy(); BOOL IsStone(); BOOL IsResource(); BOOL IsNPC(); BOOL IsPC(); BOOL IsPoly(); BOOL IsWarp(); BOOL IsGoto(); BOOL IsObject(); BOOL IsDoor(); BOOL IsBuilding(); BOOL IsWoodenDoor(); BOOL IsStoneDoor(); BOOL IsFlag(); BOOL IsGuildWall(); BOOL IsOfflineShop(); BOOL IsSupport(); BOOL IsDead(); BOOL IsStun(); BOOL IsSleep(); BOOL __IsSyncing(); BOOL IsWaiting(); BOOL IsWalking(); BOOL IsPushing(); BOOL IsAttacking(); BOOL IsActingEmotion(); BOOL IsAttacked(); BOOL IsKnockDown(); BOOL IsUsingSkill(); BOOL IsUsingMovingSkill(); BOOL CanCancelSkill(); BOOL CanAttackHorseLevel(); #ifdef __MOVIE_MODE__ BOOL IsMovieMode(); // ¿î¿µÀÚ¿ë ¿ÏÀüÈ÷ ¾Èº¸À̴°Š#endif bool NEW_CanMoveToDestPixelPosition(const TPixelPosition& c_rkPPosDst); void NEW_SetAdvancingRotationFromPixelPosition(const TPixelPosition& c_rkPPosSrc, const TPixelPosition& c_rkPPosDst); void NEW_SetAdvancingRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir); bool NEW_SetAdvancingRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst); void SetAdvancingRotation(float fRotation); void EndWalking(float fBlendingTime=0.15f); void EndWalkingWithoutBlending(); // Battle void SetEventHandler(CActorInstance::IEventHandler* pkEventHandler); void PushUDPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg); void PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg); void PushTCPStateExpanded(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg, UINT uTargetVID); void NEW_Stop(); bool NEW_UseSkill(UINT uSkill, UINT uMot, UINT uMotLoopCount, bool isMovingSkill); void NEW_Attack(); void NEW_Attack(float fDirRot); void NEW_AttackToDestPixelPositionDirection(const TPixelPosition& c_rkPPosDst); bool NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst, IFlyEventHandler* pkFlyHandler); bool NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst); bool NEW_MoveToDestPixelPositionDirection(const TPixelPosition& c_rkPPosDst); void NEW_MoveToDestInstanceDirection(CInstanceBase& rkInstDst); void NEW_MoveToDirection(float fDirRot); float NEW_GetDistanceFromDirPixelPosition(const TPixelPosition& c_rkPPosDir); float NEW_GetDistanceFromDestPixelPosition(const TPixelPosition& c_rkPPosDst); float NEW_GetDistanceFromDestInstance(CInstanceBase& rkInstDst); float NEW_GetRotation(); float NEW_GetRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst); float NEW_GetRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir); float NEW_GetRotationFromDestInstance(CInstanceBase& rkInstDst); float NEW_GetAdvancingRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir); float NEW_GetAdvancingRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst); float NEW_GetAdvancingRotationFromPixelPosition(const TPixelPosition& c_rkPPosSrc, const TPixelPosition& c_rkPPosDst); BOOL NEW_IsClickableDistanceDestPixelPosition(const TPixelPosition& c_rkPPosDst); BOOL NEW_IsClickableDistanceDestInstance(CInstanceBase& rkInstDst); bool NEW_GetFrontInstance(CInstanceBase ** ppoutTargetInstance, float fDistance); void NEW_GetRandomPositionInFanRange(CInstanceBase& rkInstTarget, TPixelPosition* pkPPosDst); bool NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInstanceBase& rkInstTarget, std::vector* pkVct_pkInst); bool NEW_GetInstanceVectorInCircleRange(float fSkillDistance, std::vector* pkVct_pkInst); void NEW_SetOwner(DWORD dwOwnerVID); void NEW_SyncPixelPosition(long & nPPosX, long & nPPosY); void NEW_SyncCurrentPixelPosition(); void NEW_SetPixelPosition(const TPixelPosition& c_rkPPosDst); bool NEW_IsLastPixelPosition(); const TPixelPosition& NEW_GetLastPixelPositionRef(); // Battle BOOL isNormalAttacking(); BOOL isComboAttacking(); MOTION_KEY GetNormalAttackIndex(); DWORD GetComboIndex(); float GetAttackingElapsedTime(); void InputNormalAttack(float fAtkDirRot); void InputComboAttack(float fAtkDirRot); void RunNormalAttack(float fAtkDirRot); void RunComboAttack(float fAtkDirRot, DWORD wMotionIndex); CInstanceBase* FindNearestVictim(); BOOL CheckAdvancing(); bool AvoidObject(const CGraphicObjectInstance& c_rkBGObj); bool IsBlockObject(const CGraphicObjectInstance& c_rkBGObj); void BlockMovement(); public: BOOL CheckAttacking(CInstanceBase& rkInstVictim); void ProcessHitting(DWORD dwMotionKey, CInstanceBase * pVictimInstance); void ProcessHitting(DWORD dwMotionKey, BYTE byEventIndex, CInstanceBase * pVictimInstance); void GetBlendingPosition(TPixelPosition * pPixelPosition); void SetBlendingPosition(const TPixelPosition & c_rPixelPosition); // Fishing void StartFishing(float frot); void StopFishing(); void ReactFishing(); void CatchSuccess(); void CatchFail(); BOOL GetFishingRot(int * pirot); // Render Mode void RestoreRenderMode(); void SetAddRenderMode(); void SetModulateRenderMode(); void SetRenderMode(int iRenderMode); void SetAddColor(const D3DXCOLOR & c_rColor); // Position void SCRIPT_SetPixelPosition(float fx, float fy); void NEW_GetPixelPosition(TPixelPosition * pPixelPosition); // Rotation void NEW_LookAtFlyTarget(); void NEW_LookAtDestInstance(CInstanceBase& rkInstDst); void NEW_LookAtDestPixelPosition(const TPixelPosition& c_rkPPosDst); float GetRotation(); float GetAdvancingRotation(); void SetRotation(float fRotation); void BlendRotation(float fRotation, float fBlendTime = 0.1f); void SetDirection(int dir); void BlendDirection(int dir, float blendTime); float GetDegreeFromDirection(int dir); // Motion // Motion Deque BOOL isLock(); void SetMotionMode(int iMotionMode); int GetMotionMode(DWORD dwMotionIndex); // Motion // Pushing Motion void ResetLocalTime(); void SetLoopMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f); void PushOnceMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f); void PushLoopMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f); void SetEndStopMotion(); // Intersect bool IntersectDefendingSphere(); bool IntersectBoundingBox(); // Part //void SetParts(const WORD * c_pParts); void Refresh(DWORD dwMotIndex, bool isLoop); //void AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // ¼ö¸íÀº ms´ÜÀ§ÀÔ´Ï´Ù. //void AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // ¼ö¸íÀº ms´ÜÀ§ÀÔ´Ï´Ù. float GetDistance(CInstanceBase * pkTargetInst); float GetDistance(const TPixelPosition & c_rPixelPosition); #ifdef ENABLE_RACE_HEIGHT float GetBaseHeight(); #endif // ETC CActorInstance& GetGraphicThingInstanceRef(); CActorInstance* GetGraphicThingInstancePtr(); bool __Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos); bool __Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight); // 2004.07.25.myevan.ÀÌÆåÆ® ¾È³ª¿À´Â ¹®Á¦ ///////////////////////////////////////////////////////////// void __ClearAffectFlagContainer(); void __ClearAffects(); ///////////////////////////////////////////////////////////// void __SetAffect(UINT eAffect, bool isVisible); void SetAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer); void __SetNormalAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer); void __SetStoneSmokeFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer); void SetEmoticon(UINT eEmoticon); void SetFishEmoticon(); bool IsPossibleEmoticon(); protected: UINT __LessRenderOrder_GetLODLevel(); void __Initialize(); void __InitializeRotationSpeed(); void __Create_SetName(const SCreateData& c_rkCreateData); void __Create_SetWarpName(const SCreateData& c_rkCreateData); CInstanceBase* __GetMainInstancePtr(); CInstanceBase* __FindInstancePtr(DWORD dwVID); bool __FindRaceType(DWORD dwRace, BYTE* pbType); DWORD __GetRaceType(); bool __IsShapeAnimalWear(); BOOL __IsChangableWeapon(int iWeaponID); void __EnableSkipCollision(); void __DisableSkipCollision(); void __ClearMainInstance(); void __Shaman_SetParalysis(bool isParalysis); void __Warrior_SetGeomgyeongAffect(bool isVisible); void __Assassin_SetEunhyeongAffect(bool isVisible); void __SetReviveInvisibilityAffect(bool isVisible); BOOL __CanProcessNetworkStatePacket(); bool __IsInDustRange(); // Emotion void __ProcessFunctionEmotion(DWORD dwMotionNumber, DWORD dwTargetVID, const TPixelPosition & c_rkPosDst); void __EnableChangingTCPState(); void __DisableChangingTCPState(); BOOL __IsEnableTCPProcess(UINT eCurFunc); // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î º¯°æ bool __CanRender(); bool __IsInViewFrustum(); // HORSE void __AttachHorseSaddle(); void __DetachHorseSaddle(); struct SHORSE { bool m_isMounting; CActorInstance* m_pkActor; SHORSE(); ~SHORSE(); void Destroy(); void Create(const TPixelPosition& c_rkPPos, UINT eRace, UINT eHitEffect); void SetAttackSpeed(UINT uAtkSpd); void SetMoveSpeed(UINT uMovSpd); void Deform(); void Render(); CActorInstance& GetActorRef(); CActorInstance* GetActorPtr(); bool IsMounting(); bool CanAttack(); bool CanUseSkill(); UINT GetLevel(); bool IsNewMount(); void __Initialize(); } m_kHorse; protected: // Blend Mode void __SetBlendRenderingMode(); void __SetAlphaValue(float fAlpha); float __GetAlphaValue(); void __ComboProcess(); void MovementProcess(); void TodoProcess(); void StateProcess(); void AttackProcess(); void StartWalking(); float GetLocalTime(); void RefreshState(DWORD dwMotIndex, bool isLoop); void RefreshActorInstance(); protected: void OnSyncing(); void OnWaiting(); void OnMoving(); void NEW_SetCurPixelPosition(const TPixelPosition& c_rkPPosDst); void NEW_SetSrcPixelPosition(const TPixelPosition& c_rkPPosDst); void NEW_SetDstPixelPosition(const TPixelPosition& c_rkPPosDst); void NEW_SetDstPixelPositionZ(FLOAT z); const TPixelPosition& NEW_GetCurPixelPositionRef(); const TPixelPosition& NEW_GetSrcPixelPositionRef(); public: const TPixelPosition& NEW_GetDstPixelPositionRef(); protected: BOOL m_isTextTail; // Instance Data std::string m_stName; DWORD m_awPart[CRaceData::PART_MAX_NUM]; DWORD m_dwLevel; #if defined(WJ_SHOW_MOB_INFO) DWORD m_dwAIFlag; #endif DWORD m_dwWeaponEvolution; //DWORD m_dwCostumEvo; DWORD m_dwEmpireID; DWORD m_dwGuildID; BYTE m_dwNewIsGuildName; bool m_bIsHidden; public: bool IsHidden(); protected: CAffectFlagContainer m_kAffectFlagContainer; DWORD m_adwCRCAffectEffect[AFFECT_NUM]; UINT __GetRefinedEffect(CItemData* pItem, DWORD dwEvolution = 0); void __ClearWeaponRefineEffect(); void __ClearArmorRefineEffect(); //void __ClearAcceRefineEffect(); #ifdef ENABLE_SASH_SYSTEM void ClearSashEffect(); #endif protected: void __AttachSelectEffect(); void __DetachSelectEffect(); void __AttachTargetEffect(); void __DetachTargetEffect(); void __AttachTargetEffectMonster(); void __DetachTargetEffectMonster(); void __AttachSelectEffectMonster(); void __DetachSelectEffectMonster(); void __AttachTargetEffectStone(); void __DetachTargetEffectStone(); void __AttachSelectEffectStone(); void __DetachSelectEffectStone(); void __AttachTargetEffectShinsoo(); void __DetachTargetEffectShinsoo(); void __AttachSelectEffectShinsoo(); void __DetachSelectEffectShinsoo(); void __AttachTargetEffectJinnos(); void __DetachTargetEffectJinnos(); void __AttachSelectEffectJinnos(); void __DetachSelectEffectJinnos(); void __AttachTargetEffectChunjo(); void __DetachTargetEffectChunjo(); void __AttachSelectEffectChunjo(); void __DetachSelectEffectChunjo(); void __AttachEmpireEffect(DWORD eEmpire); protected: struct SEffectContainer { typedef std::map Dict; Dict m_kDct_dwEftID; } m_kEffectContainer; void __EffectContainer_Initialize(); void __AttachEfektBossa(); void __EffectContainer_Destroy(); void __EffectContainer_Suspend(); void __EffectContainer_Continue(); DWORD __EffectContainer_AttachEffect(DWORD eEffect); void __EffectContainer_DetachEffect(DWORD eEffect); SEffectContainer::Dict& __EffectContainer_GetDict(); protected: struct SStoneSmoke { DWORD m_dwEftID; } m_kStoneSmoke; void __StoneSmoke_Inialize(); void __StoneSmoke_Destroy(); void __StoneSmoke_Create(DWORD eSmoke); protected: // Emoticon //DWORD m_adwCRCEmoticonEffect[EMOTICON_NUM]; BYTE m_eType; BYTE m_eRaceType; DWORD m_eShape; DWORD m_dwRace; DWORD m_dwVirtualNumber; short m_sAlignment; #ifdef ENABLE_TITLE_SYSTEM short m_sPrestige; #endif #ifdef ENABLE_REBORN_SYSTEM short m_sReborn; #endif BYTE m_byPKMode; #if defined(WJ_COMBAT_ZONE) BYTE combat_zone_rank; DWORD combat_zone_points; #endif bool m_isKiller; bool m_isPartyMember; // Movement int m_iRotatingDirection; DWORD m_dwAdvActorVID; DWORD m_dwLastDmgActorVID; LONG m_nAverageNetworkGap; DWORD m_dwNextUpdateHeightTime; bool m_isGoing; TPixelPosition m_kPPosDust; DWORD m_dwLastComboIndex; DWORD m_swordRefineEffectRight; DWORD m_swordRefineEffectLeft; DWORD m_armorRefineEffect; //DWORD m_acceEffect; #ifdef ENABLE_SASH_SYSTEM DWORD m_dwSashEffect; #endif struct SMoveAfterFunc { UINT eFunc; UINT uArg; // For Emotion Function UINT uArgExpanded; TPixelPosition kPosDst; }; SMoveAfterFunc m_kMovAfterFunc; float m_fDstRot; float m_fAtkPosTime; float m_fRotSpd; float m_fMaxRotSpd; BOOL m_bEnableTCPState; // Graphic Instance CActorInstance m_GraphicThingInstance; protected: struct SCommand { DWORD m_dwChkTime; DWORD m_dwCmdTime; float m_fDstRot; UINT m_eFunc; UINT m_uArg; UINT m_uTargetVID; TPixelPosition m_kPPosDst; }; typedef std::list CommandQueue; DWORD m_dwBaseChkTime; DWORD m_dwBaseCmdTime; DWORD m_dwSkipTime; CommandQueue m_kQue_kCmdNew; BOOL m_bDamageEffectType; struct SEffectDamage { DWORD damage; BYTE flag; BOOL bSelf; BOOL bTarget; }; typedef std::list CommandDamageQueue; CommandDamageQueue m_DamageQueue; void ProcessDamage(); public: void AddDamageEffect(DWORD damage,BYTE flag,BOOL bSelf,BOOL bTarget); protected: struct SWarrior { DWORD m_dwGeomgyeongEffect; }; SWarrior m_kWarrior; void __Warrior_Initialize(); public: static void ClearPVPKeySystem(); static void InsertPVPKey(DWORD dwSrcVID, DWORD dwDstVID); static void InsertPVPReadyKey(DWORD dwSrcVID, DWORD dwDstVID); static void RemovePVPKey(DWORD dwSrcVID, DWORD dwDstVID); static void InsertGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID); static void RemoveGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID); static void InsertDUELKey(DWORD dwSrcVID, DWORD dwDstVID); UINT GetNameColorIndex(); const D3DXCOLOR& GetNameColor(); const D3DXCOLOR& GetTitleColor(); #ifdef ENABLE_TITLE_SYSTEM const D3DXCOLOR& GetTitlePrestigeColor(); #endif #ifdef ENABLE_REBORN_SYSTEM const D3DXCOLOR& GetTitleRebornColor(); #endif protected: static DWORD __GetPVPKey(DWORD dwSrcVID, DWORD dwDstVID); static bool __FindPVPKey(DWORD dwSrcVID, DWORD dwDstVID); static bool __FindPVPReadyKey(DWORD dwSrcVID, DWORD dwDstVID); static bool __FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID); static bool __FindDUELKey(DWORD dwSrcGuildID, DWORD dwDstGuildID); protected: CActorInstance::IEventHandler* GetEventHandlerPtr(); CActorInstance::IEventHandler& GetEventHandlerRef(); protected: static float __GetBackgroundHeight(float x, float y); static DWORD __GetShadowMapColor(float x, float y); public: static void ResetPerformanceCounter(); static void GetInfo(std::string* pstInfo); public: static CInstanceBase* New(); static void Delete(CInstanceBase* pkInst); static CDynamicPool ms_kPool; protected: static DWORD ms_dwUpdateCounter; static DWORD ms_dwRenderCounter; static DWORD ms_dwDeformCounter; public: DWORD GetDuelMode(); void SetDuelMode(DWORD type); protected: DWORD m_dwDuelMode; DWORD m_dwEmoticonTime; }; inline int RaceToJob(int race) { switch (race) { case 0: case 4: return 0; case 1: case 5: return 1; case 2: case 6: return 2; case 3: case 7: return 3; case 8: return 4; default: return 0; } return 0; } inline int RaceToSex(int race) { switch (race) { case 0: case 2: case 5: case 7: case 8: return 1; case 1: case 3: case 4: case 6: return 0; } return 0; }