1. #pragma once
  2. #include "../gamelib/RaceData.h"
  3. #include "../gamelib/ActorInstance.h"
  4. #include "AffectFlagContainer.h"
  5. class CInstanceBase
  6. {
  7. public:
  8. struct SCreateData
  9. {
  10. BYTE m_bType;
  11. DWORD m_dwStateFlags;
  12. DWORD m_dwEmpireID;
  13. DWORD m_dwGuildID;
  14. DWORD m_dwLevel;
  15. DWORD m_dwVID;
  16. DWORD m_dwRace;
  17. DWORD m_dwMovSpd;
  18. DWORD m_dwAtkSpd;
  19. LONG m_lPosX;
  20. LONG m_lPosY;
  21. FLOAT m_fRot;
  22. DWORD m_dwArmor;
  23. DWORD m_dwWeapon;
  24. DWORD m_dwHair;
  25. DWORD m_dwMountVnum;
  26. short m_sAlignment;
  27. BYTE m_byPKMode;
  28. CAffectFlagContainer m_kAffectFlags;
  29. std::string m_stName;
  30. bool m_isMain;
  31. };
  32. public:
  33. typedef DWORD TType;
  34. enum EDirection
  35. {
  36. DIR_NORTH,
  37. DIR_NORTHEAST,
  38. DIR_EAST,
  39. DIR_SOUTHEAST,
  40. DIR_SOUTH,
  41. DIR_SOUTHWEST,
  42. DIR_WEST,
  43. DIR_NORTHWEST,
  44. DIR_MAX_NUM,
  45. };
  46. enum
  47. {
  48. FUNC_WAIT,
  49. FUNC_MOVE,
  50. FUNC_ATTACK,
  51. FUNC_COMBO,
  52. FUNC_MOB_SKILL,
  53. FUNC_EMOTION,
  54. FUNC_SKILL = 0x80,
  55. };
  56. enum
  57. {
  58. AFFECT_YMIR,
  59. AFFECT_INVISIBILITY,
  60. AFFECT_SPAWN,
  61. AFFECT_POISON,
  62. AFFECT_SLOW,
  63. AFFECT_STUN,
  64. AFFECT_DUNGEON_READY, // ´øÀü¿¡¼­ Áغñ »óÅÂ
  65. AFFECT_SHOW_ALWAYS, // AFFECT_DUNGEON_UNIQUE ¿¡¼­ º¯°æ(Ŭ¶óÀÌ¾ğÆ®¿¡¼­ ÄøµµÇÁö¾ÊÀ½)
  66. AFFECT_BUILDING_CONSTRUCTION_SMALL,
  67. AFFECT_BUILDING_CONSTRUCTION_LARGE,
  68. AFFECT_BUILDING_UPGRADE,
  69. AFFECT_MOV_SPEED_POTION, // 11
  70. AFFECT_ATT_SPEED_POTION, // 12
  71. AFFECT_FISH_MIND, // 13
  72. AFFECT_JEONGWI, // 14 Àü±ÍÈ¥
  73. AFFECT_GEOMGYEONG, // 15 °Ë°æ
  74. AFFECT_CHEONGEUN, // 16 õ±ÙÃß
  75. AFFECT_GYEONGGONG, // 17 °æ°ø¼ú
  76. AFFECT_EUNHYEONG, // 18 ÀºÇü¹ı
  77. AFFECT_GWIGEOM, // 19 ±Í°Ë
  78. AFFECT_GONGPO, // 20 °øÆ÷
  79. AFFECT_JUMAGAP, // 21 ÁÖ¸¶°©
  80. AFFECT_HOSIN, // 22 È£½Å
  81. AFFECT_BOHO, // 23 º¸È£
  82. AFFECT_KWAESOK, // 24 Äè¼Ó
  83. AFFECT_HEUKSIN, // 25 Èæ½Å¼öÈ£
  84. AFFECT_MUYEONG, // 26 ¹«¿µÁø
  85. AFFECT_REVIVE_INVISIBILITY, // 27 ºÎȰ ¹«Àû
  86. AFFECT_FIRE, // 28 Áö¼Ó ºÒ
  87. AFFECT_GICHEON, // 29 ±âõ ´ë°ø
  88. AFFECT_JEUNGRYEOK, // 30 Áõ·Â¼ú
  89. AFFECT_DASH, // 31 ´ë½¬
  90. AFFECT_PABEOP, // 32 ÆÄ¹ı¼ú
  91. AFFECT_FALLEN_CHEONGEUN, // 33 ´Ù¿î ±×·¹À̵å õ±ÙÃß
  92. AFFECT_POLYMORPH, // 34 Æú¸®¸ğÇÁ
  93. AFFECT_WAR_FLAG1, // 35
  94. AFFECT_WAR_FLAG2, // 36
  95. AFFECT_WAR_FLAG3, // 37
  96. AFFECT_CHINA_FIREWORK, // 38
  97. AFFECT_PREMIUM_SILVER,
  98. AFFECT_PREMIUM_GOLD,
  99. AFFECT_RAMADAN_RING, // 41 ÃÊ½Â´Ş ¹İÁö Âø¿ë Affect
  100. #ifdef ITEM_BUFF_SYSTEM
  101. AFFECT_RESIST_BUFF, //41
  102. AFFECT_CRITICAL_BUFF, //42
  103. AFFECT_REFLECT_BUFF, //43
  104. #endif
  105. #if defined ENABLE_DBONE_EFFECTS
  106. AFFECT_DBONE1,//44
  107. AFFECT_DBONE2,//45
  108. #endif
  109. AFFECT_NUM = 64,
  110. AFFECT_HWAYEOM = AFFECT_GEOMGYEONG,
  111. };
  112. enum
  113. {
  114. NEW_AFFECT_MOV_SPEED = 200,
  115. NEW_AFFECT_ATT_SPEED,
  116. NEW_AFFECT_ATT_GRADE,
  117. NEW_AFFECT_INVISIBILITY,
  118. NEW_AFFECT_STR,
  119. NEW_AFFECT_DEX, // 205
  120. NEW_AFFECT_CON,
  121. NEW_AFFECT_INT,
  122. NEW_AFFECT_FISH_MIND_PILL,
  123. NEW_AFFECT_POISON,
  124. NEW_AFFECT_STUN, // 210
  125. NEW_AFFECT_SLOW,
  126. NEW_AFFECT_DUNGEON_READY,
  127. NEW_AFFECT_DUNGEON_UNIQUE,
  128. NEW_AFFECT_BUILDING,
  129. NEW_AFFECT_REVIVE_INVISIBLE, // 215
  130. NEW_AFFECT_FIRE,
  131. NEW_AFFECT_CAST_SPEED,
  132. NEW_AFFECT_HP_RECOVER_CONTINUE,
  133. NEW_AFFECT_SP_RECOVER_CONTINUE,
  134. NEW_AFFECT_POLYMORPH, // 220
  135. NEW_AFFECT_MOUNT,
  136. NEW_AFFECT_WAR_FLAG, // 222
  137. NEW_AFFECT_BLOCK_CHAT, // 223
  138. NEW_AFFECT_CHINA_FIREWORK,
  139. NEW_AFFECT_BOW_DISTANCE, // 225
  140. NEW_AFFECT_EXP_BONUS = 500, // °æÇèÀÇ ¹İÁö
  141. NEW_AFFECT_ITEM_BONUS = 501, // µµµÏÀÇ Àå°©
  142. NEW_AFFECT_SAFEBOX = 502, // PREMIUM_SAFEBOX,
  143. NEW_AFFECT_AUTOLOOT = 503, // PREMIUM_AUTOLOOT,
  144. NEW_AFFECT_FISH_MIND = 504, // PREMIUM_FISH_MIND,
  145. NEW_AFFECT_MARRIAGE_FAST = 505, // ¿ø¾ÓÀÇ ±êÅĞ (±İ½½),
  146. NEW_AFFECT_GOLD_BONUS = 506,
  147. NEW_AFFECT_MALL = 510, // ¸ô ¾ÆÀÌÅÛ ¿¡ÆåÆ®
  148. NEW_AFFECT_NO_DEATH_PENALTY = 511, // ¿ë½ÅÀÇ °¡È£ (°æÇèÄ¡ ÆĞ³ÎƼ¸¦ Çѹø ¸·¾ÆÁØ´Ù)
  149. NEW_AFFECT_SKILL_BOOK_BONUS = 512, // ¼±ÀÎÀÇ ±³ÈÆ (Ã¥ ¼ö·Ã ¼º°ø È®·üÀÌ 50% Áõ°¡)
  150. NEW_AFFECT_SKILL_BOOK_NO_DELAY = 513, // ÁÖ¾È ¼ú¼­ (Ã¥ ¼ö·Ã µô·¹ÀÌ ¾øÀ½)
  151. NEW_AFFECT_EXP_BONUS_EURO_FREE = 516, // °æÇèÀÇ ¹İÁö (À¯·´ ¹öÀü 14 ·¹º§ ÀÌÇÏ ±âº» È¿°ú)
  152. NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517,
  153. NEW_AFFECT_AUTO_HP_RECOVERY = 534, // ÀÚµ¿¹°¾à HP
  154. NEW_AFFECT_AUTO_SP_RECOVERY = 535, // ÀÚµ¿¹°¾à SP
  155. NEW_AFFECT_DRAGON_SOUL_QUALIFIED = 540,
  156. NEW_AFFECT_DRAGON_SOUL_DECK1 = 541,
  157. NEW_AFFECT_DRAGON_SOUL_DECK2 = 542,
  158. NEW_AFFECT_RAMADAN_ABILITY = 300,
  159. NEW_AFFECT_RAMADAN_RING = 301, // ¶ó¸¶´Ü À̺¥Æ®¿ë Ư¼ö¾ÆÀÌÅÛ Ãʽ´ŞÀÇ ¹İÁö Âø¿ë À¯¹«
  160. NEW_AFFECT_NOG_POCKET_ABILITY = 302,
  161. NEW_AFFECT_QUEST_START_IDX = 1000,
  162. };
  163. enum
  164. {
  165. STONE_SMOKE1 = 0, // 99%
  166. STONE_SMOKE2 = 1, // 85%
  167. STONE_SMOKE3 = 2, // 80%
  168. STONE_SMOKE4 = 3, // 60%
  169. STONE_SMOKE5 = 4, // 45%
  170. STONE_SMOKE6 = 5, // 40%
  171. STONE_SMOKE7 = 6, // 20%
  172. STONE_SMOKE8 = 7, // 10%
  173. STONE_SMOKE_NUM = 4,
  174. };
  175. enum EBuildingAffect
  176. {
  177. BUILDING_CONSTRUCTION_SMALL = 0,
  178. BUILDING_CONSTRUCTION_LARGE = 1,
  179. BUILDING_UPGRADE = 2,
  180. };
  181. enum
  182. {
  183. WEAPON_DUALHAND,
  184. WEAPON_ONEHAND,
  185. WEAPON_TWOHAND,
  186. WEAPON_NUM,
  187. };
  188. enum
  189. {
  190. EMPIRE_NONE,
  191. EMPIRE_A,
  192. EMPIRE_B,
  193. EMPIRE_C,
  194. EMPIRE_NUM,
  195. };
  196. enum
  197. {
  198. NAMECOLOR_MOB,
  199. NAMECOLOR_NPC,
  200. NAMECOLOR_PC,
  201. NAMECOLOR_PC_END = NAMECOLOR_PC + EMPIRE_NUM,
  202. NAMECOLOR_NORMAL_MOB,
  203. NAMECOLOR_NORMAL_NPC,
  204. NAMECOLOR_NORMAL_PC,
  205. NAMECOLOR_NORMAL_PC_END = NAMECOLOR_NORMAL_PC + EMPIRE_NUM,
  206. NAMECOLOR_EMPIRE_MOB,
  207. NAMECOLOR_EMPIRE_NPC,
  208. NAMECOLOR_EMPIRE_PC,
  209. NAMECOLOR_EMPIRE_PC_END = NAMECOLOR_EMPIRE_PC + EMPIRE_NUM,
  210. NAMECOLOR_FUNC,
  211. NAMECOLOR_PK,
  212. NAMECOLOR_PVP,
  213. NAMECOLOR_PARTY,
  214. NAMECOLOR_WARP,
  215. NAMECOLOR_WAYPOINT,
  216. NAMECOLOR_EXTRA = NAMECOLOR_FUNC + 10,
  217. NAMECOLOR_NUM = NAMECOLOR_EXTRA + 10,
  218. };
  219. enum
  220. {
  221. ALIGNMENT_TYPE_WHITE,
  222. ALIGNMENT_TYPE_NORMAL,
  223. ALIGNMENT_TYPE_DARK,
  224. };
  225. enum
  226. {
  227. EMOTICON_EXCLAMATION = 1,
  228. EMOTICON_FISH = 11,
  229. EMOTICON_NUM = 128,
  230. TITLE_NUM = 9,
  231. TITLE_NONE = 4,
  232. };
  233. enum //¾Æ·¡ ¹øÈ£°¡ ¹Ù²î¸é registerEffect Âʵµ ¹Ù²Ù¾î Áà¾ß ÇÑ´Ù.
  234. {
  235. EFFECT_REFINED_NONE,
  236. EFFECT_SWORD_REFINED7,
  237. EFFECT_SWORD_REFINED8,
  238. EFFECT_SWORD_REFINED9,
  239. EFFECT_BOW_REFINED7,
  240. EFFECT_BOW_REFINED8,
  241. EFFECT_BOW_REFINED9,
  242. EFFECT_FANBELL_REFINED7,
  243. EFFECT_FANBELL_REFINED8,
  244. EFFECT_FANBELL_REFINED9,
  245. EFFECT_SMALLSWORD_REFINED7,
  246. EFFECT_SMALLSWORD_REFINED8,
  247. EFFECT_SMALLSWORD_REFINED9,
  248. EFFECT_SMALLSWORD_REFINED7_LEFT,
  249. EFFECT_SMALLSWORD_REFINED8_LEFT,
  250. EFFECT_SMALLSWORD_REFINED9_LEFT,
  251. EFFECT_BODYARMOR_REFINED7,
  252. EFFECT_BODYARMOR_REFINED8,
  253. EFFECT_BODYARMOR_REFINED9,
  254. EFFECT_BODYARMOR_SPECIAL, // °©¿Ê 4-2-1
  255. EFFECT_BODYARMOR_SPECIAL2, // °©¿Ê 4-2-2
  256. EFFECT_REFINED_NUM,
  257. };
  258. enum DamageFlag
  259. {
  260. DAMAGE_NORMAL = (1<<0),
  261. DAMAGE_POISON = (1<<1),
  262. DAMAGE_DODGE = (1<<2),
  263. DAMAGE_BLOCK = (1<<3),
  264. DAMAGE_PENETRATE= (1<<4),
  265. DAMAGE_CRITICAL = (1<<5),
  266. // ¹İ-_-»ç
  267. };
  268. enum
  269. {
  270. EFFECT_DUST,
  271. EFFECT_STUN,
  272. EFFECT_HIT,
  273. EFFECT_FLAME_ATTACK,
  274. EFFECT_FLAME_HIT,
  275. EFFECT_FLAME_ATTACH,
  276. EFFECT_ELECTRIC_ATTACK,
  277. EFFECT_ELECTRIC_HIT,
  278. EFFECT_ELECTRIC_ATTACH,
  279. EFFECT_SPAWN_APPEAR,
  280. EFFECT_SPAWN_DISAPPEAR,
  281. EFFECT_LEVELUP,
  282. EFFECT_SKILLUP,
  283. EFFECT_HPUP_RED,
  284. EFFECT_SPUP_BLUE,
  285. EFFECT_SPEEDUP_GREEN,
  286. EFFECT_DXUP_PURPLE,
  287. EFFECT_CRITICAL,
  288. EFFECT_PENETRATE,
  289. EFFECT_BLOCK,
  290. EFFECT_DODGE,
  291. EFFECT_FIRECRACKER,
  292. EFFECT_SPIN_TOP,
  293. EFFECT_WEAPON,
  294. EFFECT_WEAPON_END = EFFECT_WEAPON + WEAPON_NUM,
  295. EFFECT_AFFECT,
  296. EFFECT_AFFECT_GYEONGGONG = EFFECT_AFFECT + AFFECT_GYEONGGONG,
  297. EFFECT_AFFECT_KWAESOK = EFFECT_AFFECT + AFFECT_KWAESOK,
  298. EFFECT_AFFECT_END = EFFECT_AFFECT + AFFECT_NUM,
  299. EFFECT_EMOTICON,
  300. EFFECT_EMOTICON_END = EFFECT_EMOTICON + EMOTICON_NUM,
  301. EFFECT_SELECT,
  302. EFFECT_TARGET,
  303. EFFECT_EMPIRE,
  304. EFFECT_EMPIRE_END = EFFECT_EMPIRE + EMPIRE_NUM,
  305. EFFECT_HORSE_DUST,
  306. EFFECT_REFINED,
  307. EFFECT_REFINED_END = EFFECT_REFINED + EFFECT_REFINED_NUM,
  308. EFFECT_DAMAGE_TARGET,
  309. EFFECT_DAMAGE_NOT_TARGET,
  310. EFFECT_DAMAGE_SELFDAMAGE,
  311. EFFECT_DAMAGE_SELFDAMAGE2,
  312. EFFECT_DAMAGE_POISON,
  313. EFFECT_DAMAGE_MISS,
  314. EFFECT_DAMAGE_TARGETMISS,
  315. EFFECT_DAMAGE_CRITICAL,
  316. EFFECT_SUCCESS,
  317. EFFECT_FAIL,
  318. EFFECT_FR_SUCCESS,
  319. EFFECT_LEVELUP_ON_14_FOR_GERMANY, //·¹º§¾÷ 14À϶§ ( µ¶ÀÏÀü¿ë )
  320. EFFECT_LEVELUP_UNDER_15_FOR_GERMANY,//·¹º§¾÷ 15À϶§ ( µ¶ÀÏÀü¿ë )
  321. EFFECT_PERCENT_DAMAGE1,
  322. EFFECT_PERCENT_DAMAGE2,
  323. EFFECT_PERCENT_DAMAGE3,
  324. EFFECT_AUTO_HPUP,
  325. EFFECT_AUTO_SPUP,
  326. EFFECT_RAMADAN_RING_EQUIP, // ÃÊ½Â´Ş ¹İÁö Âø¿ë ¼ø°£¿¡ ¹ßµ¿ÇÏ´Â ÀÌÆåÆ®
  327. EFFECT_HALLOWEEN_CANDY_EQUIP, // ÇÒ·ÎÀ© »çÅÁ Âø¿ë ¼ø°£¿¡ ¹ßµ¿ÇÏ´Â ÀÌÆåÆ®
  328. EFFECT_HAPPINESS_RING_EQUIP, // ÇູÀÇ ¹İÁö Âø¿ë ¼ø°£¿¡ ¹ßµ¿ÇÏ´Â ÀÌÆåÆ®
  329. EFFECT_LOVE_PENDANT_EQUIP, // ÇູÀÇ ¹İÁö Âø¿ë ¼ø°£¿¡ ¹ßµ¿ÇÏ´Â ÀÌÆåÆ®
  330. EFFECT_TEMP,
  331. EFFECT_NUM,
  332. };
  333. enum
  334. {
  335. DUEL_NONE,
  336. DUEL_CANNOTATTACK,
  337. DUEL_START,
  338. };
  339. public:
  340. static void DestroySystem();
  341. static void CreateSystem(UINT uCapacity);
  342. static bool RegisterEffect(UINT eEftType, const char* c_szEftAttachBone, const char* c_szEftName, bool isCache);
  343. static void RegisterTitleName(int iIndex, const char * c_szTitleName);
  344. static bool RegisterNameColor(UINT uIndex, UINT r, UINT g, UINT b);
  345. static bool RegisterTitleColor(UINT uIndex, UINT r, UINT g, UINT b);
  346. static bool ChangeEffectTexture(UINT eEftType, const char* c_szSrcFileName, const char* c_szDstFileName);
  347. static void SetDustGap(float fDustGap);
  348. static void SetHorseDustGap(float fDustGap);
  349. static void SetEmpireNameMode(bool isEnable);
  350. static const D3DXCOLOR& GetIndexedNameColor(UINT eNameColor);
  351. public:
  352. void SetMainInstance();
  353. void OnSelected();
  354. void OnUnselected();
  355. void OnTargeted();
  356. void OnUntargeted();
  357. protected:
  358. bool __IsExistMainInstance();
  359. bool __IsMainInstance();
  360. bool __MainCanSeeHiddenThing();
  361. float __GetBowRange();
  362. protected:
  363. DWORD __AttachEffect(UINT eEftType);
  364. DWORD __AttachEffect(char filename[128]);
  365. void __DetachEffect(DWORD dwEID);
  366. public:
  367. void CreateSpecialEffect(DWORD iEffectIndex);
  368. void AttachSpecialEffect(DWORD effect);
  369. protected:
  370. static std::string ms_astAffectEffectAttachBone[EFFECT_NUM];
  371. static DWORD ms_adwCRCAffectEffect[EFFECT_NUM];
  372. static float ms_fDustGap;
  373. static float ms_fHorseDustGap;
  374. public:
  375. CInstanceBase();
  376. virtual ~CInstanceBase();
  377. bool LessRenderOrder(CInstanceBase* pkInst);
  378. void MountHorse(UINT eRace);
  379. void DismountHorse();
  380. // ½ºÅ©¸³Æ®¿ë Å×½ºÆ® ÇÔ¼ö. ³ªÁß¿¡ ¾ø¿¡ÀÚ
  381. void SCRIPT_SetAffect(UINT eAffect, bool isVisible);
  382. float CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst);
  383. // Instance Data
  384. bool IsFlyTargetObject();
  385. void ClearFlyTargetInstance();
  386. void SetFlyTargetInstance(CInstanceBase& rkInstDst);
  387. void AddFlyTargetInstance(CInstanceBase& rkInstDst);
  388. void AddFlyTargetPosition(const TPixelPosition& c_rkPPosDst);
  389. float GetFlyTargetDistance();
  390. void SetAlpha(float fAlpha);
  391. void DeleteBlendOut();
  392. void AttachTextTail();
  393. void DetachTextTail();
  394. void UpdateTextTailLevel(DWORD level);
  395. void RefreshTextTail();
  396. void RefreshTextTailTitle();
  397. bool Create(const SCreateData& c_rkCreateData);
  398. bool CreateDeviceObjects();
  399. void DestroyDeviceObjects();
  400. void Destroy();
  401. void Update();
  402. bool UpdateDeleting();
  403. void Transform();
  404. void Deform();
  405. void Render();
  406. void RenderTrace();
  407. void RenderToShadowMap();
  408. void RenderCollision();
  409. void RegisterBoundingSphere();
  410. // Temporary
  411. void GetBoundBox(D3DXVECTOR3 * vtMin, D3DXVECTOR3 * vtMax);
  412. void SetNameString(const char* c_szName, int len);
  413. bool SetRace(DWORD dwRaceIndex);
  414. void SetVirtualID(DWORD wVirtualNumber);
  415. void SetVirtualNumber(DWORD dwVirtualNumber);
  416. void SetInstanceType(int iInstanceType);
  417. void SetAlignment(short sAlignment);
  418. void SetLevel(DWORD level);
  419. void SetPKMode(BYTE byPKMode);
  420. void SetKiller(bool bFlag);
  421. void SetPartyMemberFlag(bool bFlag);
  422. void SetStateFlags(DWORD dwStateFlags);
  423. void SetArmor(DWORD dwArmor);
  424. void SetShape(DWORD eShape, float fSpecular=0.0f);
  425. void SetHair(DWORD eHair);
  426. bool SetWeapon(DWORD eWeapon);
  427. bool ChangeArmor(DWORD dwArmor);
  428. void ChangeWeapon(DWORD eWeapon);
  429. void ChangeHair(DWORD eHair);
  430. void ChangeGuild(DWORD dwGuildID);
  431. DWORD GetWeaponType();
  432. void SetComboType(UINT uComboType);
  433. void SetAttackSpeed(UINT uAtkSpd);
  434. void SetMoveSpeed(UINT uMovSpd);
  435. void SetRotationSpeed(float fRotSpd);
  436. const char * GetNameString();
  437. #ifdef ENABLE_NEW_EXCHANGE_WINDOW
  438. DWORD GetLevel();
  439. #endif
  440. int GetInstanceType();
  441. DWORD GetPart(CRaceData::EParts part);
  442. DWORD GetShape();
  443. DWORD GetRace();
  444. DWORD GetVirtualID();
  445. DWORD GetVirtualNumber();
  446. DWORD GetEmpireID();
  447. DWORD GetGuildID();
  448. int GetAlignment();
  449. UINT GetAlignmentGrade();
  450. int GetAlignmentType();
  451. BYTE GetPKMode();
  452. bool IsKiller();
  453. bool IsPartyMember();
  454. void ActDualEmotion(CInstanceBase & rkDstInst, WORD dwMotionNumber1, WORD dwMotionNumber2);
  455. void ActEmotion(DWORD dwMotionNumber);
  456. void LevelUp();
  457. void SkillUp();
  458. void UseSpinTop();
  459. void Revive();
  460. void Stun();
  461. void Die();
  462. void Hide();
  463. void Show();
  464. bool CanAct();
  465. bool CanMove();
  466. bool CanAttack();
  467. bool CanUseSkill();
  468. bool CanFishing();
  469. bool IsConflictAlignmentInstance(CInstanceBase& rkInstVictim);
  470. bool IsAttackableInstance(CInstanceBase& rkInstVictim);
  471. bool IsTargetableInstance(CInstanceBase& rkInstVictim);
  472. bool IsPVPInstance(CInstanceBase& rkInstVictim);
  473. bool CanChangeTarget();
  474. bool CanPickInstance();
  475. bool CanViewTargetHP(CInstanceBase& rkInstVictim);
  476. // Movement
  477. BOOL IsGoing();
  478. bool NEW_Goto(const TPixelPosition& c_rkPPosDst, float fDstRot);
  479. void EndGoing();
  480. void SetRunMode();
  481. void SetWalkMode();
  482. bool IsAffect(UINT uAffect);
  483. BOOL IsInvisibility();
  484. BOOL IsParalysis();
  485. BOOL IsGameMaster();
  486. BOOL IsSameEmpire(CInstanceBase& rkInstDst);
  487. BOOL IsBowMode();
  488. BOOL IsHandMode();
  489. BOOL IsFishingMode();
  490. BOOL IsFishing();
  491. BOOL IsWearingDress();
  492. BOOL IsHoldingPickAxe();
  493. BOOL IsMountingHorse();
  494. BOOL IsNewMount();
  495. BOOL IsForceVisible();
  496. BOOL IsInSafe();
  497. BOOL IsEnemy();
  498. BOOL IsStone();
  499. BOOL IsResource();
  500. BOOL IsNPC();
  501. BOOL IsPC();
  502. BOOL IsPoly();
  503. BOOL IsWarp();
  504. BOOL IsGoto();
  505. BOOL IsObject();
  506. BOOL IsDoor();
  507. BOOL IsBuilding();
  508. BOOL IsWoodenDoor();
  509. BOOL IsStoneDoor();
  510. BOOL IsFlag();
  511. BOOL IsGuildWall();
  512. BOOL IsDead();
  513. BOOL IsStun();
  514. BOOL IsSleep();
  515. BOOL __IsSyncing();
  516. BOOL IsWaiting();
  517. BOOL IsWalking();
  518. BOOL IsPushing();
  519. BOOL IsAttacking();
  520. BOOL IsActingEmotion();
  521. BOOL IsAttacked();
  522. BOOL IsKnockDown();
  523. BOOL IsUsingSkill();
  524. BOOL IsUsingMovingSkill();
  525. BOOL CanCancelSkill();
  526. BOOL CanAttackHorseLevel();
  527. #ifdef __MOVIE_MODE__
  528. BOOL IsMovieMode(); // ¿î¿µÀÚ¿ë ¿ÏÀüÈ÷ ¾Èº¸À̴°Å
  529. #endif
  530. bool NEW_CanMoveToDestPixelPosition(const TPixelPosition& c_rkPPosDst);
  531. void NEW_SetAdvancingRotationFromPixelPosition(const TPixelPosition& c_rkPPosSrc, const TPixelPosition& c_rkPPosDst);
  532. void NEW_SetAdvancingRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
  533. bool NEW_SetAdvancingRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
  534. void SetAdvancingRotation(float fRotation);
  535. void EndWalking(float fBlendingTime=0.15f);
  536. void EndWalkingWithoutBlending();
  537. // Battle
  538. void SetEventHandler(CActorInstance::IEventHandler* pkEventHandler);
  539. void PushUDPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg);
  540. void PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg);
  541. void PushTCPStateExpanded(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg, UINT uTargetVID);
  542. void NEW_Stop();
  543. bool NEW_UseSkill(UINT uSkill, UINT uMot, UINT uMotLoopCount, bool isMovingSkill);
  544. void NEW_Attack();
  545. void NEW_Attack(float fDirRot);
  546. void NEW_AttackToDestPixelPositionDirection(const TPixelPosition& c_rkPPosDst);
  547. bool NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst, IFlyEventHandler* pkFlyHandler);
  548. bool NEW_AttackToDestInstanceDirection(CInstanceBase& rkInstDst);
  549. bool NEW_MoveToDestPixelPositionDirection(const TPixelPosition& c_rkPPosDst);
  550. void NEW_MoveToDestInstanceDirection(CInstanceBase& rkInstDst);
  551. void NEW_MoveToDirection(float fDirRot);
  552. float NEW_GetDistanceFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
  553. float NEW_GetDistanceFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
  554. float NEW_GetDistanceFromDestInstance(CInstanceBase& rkInstDst);
  555. float NEW_GetRotation();
  556. float NEW_GetRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
  557. float NEW_GetRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
  558. float NEW_GetRotationFromDestInstance(CInstanceBase& rkInstDst);
  559. float NEW_GetAdvancingRotationFromDirPixelPosition(const TPixelPosition& c_rkPPosDir);
  560. float NEW_GetAdvancingRotationFromDestPixelPosition(const TPixelPosition& c_rkPPosDst);
  561. float NEW_GetAdvancingRotationFromPixelPosition(const TPixelPosition& c_rkPPosSrc, const TPixelPosition& c_rkPPosDst);
  562. BOOL NEW_IsClickableDistanceDestPixelPosition(const TPixelPosition& c_rkPPosDst);
  563. BOOL NEW_IsClickableDistanceDestInstance(CInstanceBase& rkInstDst);
  564. bool NEW_GetFrontInstance(CInstanceBase ** ppoutTargetInstance, float fDistance);
  565. void NEW_GetRandomPositionInFanRange(CInstanceBase& rkInstTarget, TPixelPosition* pkPPosDst);
  566. bool NEW_GetInstanceVectorInFanRange(float fSkillDistance, CInstanceBase& rkInstTarget, std::vector<CInstanceBase*>* pkVct_pkInst);
  567. bool NEW_GetInstanceVectorInCircleRange(float fSkillDistance, std::vector<CInstanceBase*>* pkVct_pkInst);
  568. void NEW_SetOwner(DWORD dwOwnerVID);
  569. void NEW_SyncPixelPosition(long & nPPosX, long & nPPosY);
  570. void NEW_SyncCurrentPixelPosition();
  571. void NEW_SetPixelPosition(const TPixelPosition& c_rkPPosDst);
  572. bool NEW_IsLastPixelPosition();
  573. const TPixelPosition& NEW_GetLastPixelPositionRef();
  574. // Battle
  575. BOOL isNormalAttacking();
  576. BOOL isComboAttacking();
  577. MOTION_KEY GetNormalAttackIndex();
  578. DWORD GetComboIndex();
  579. float GetAttackingElapsedTime();
  580. void InputNormalAttack(float fAtkDirRot);
  581. void InputComboAttack(float fAtkDirRot);
  582. void RunNormalAttack(float fAtkDirRot);
  583. void RunComboAttack(float fAtkDirRot, DWORD wMotionIndex);
  584. CInstanceBase* FindNearestVictim();
  585. BOOL CheckAdvancing();
  586. bool AvoidObject(const CGraphicObjectInstance& c_rkBGObj);
  587. bool IsBlockObject(const CGraphicObjectInstance& c_rkBGObj);
  588. void BlockMovement();
  589. public:
  590. BOOL CheckAttacking(CInstanceBase& rkInstVictim);
  591. void ProcessHitting(DWORD dwMotionKey, CInstanceBase * pVictimInstance);
  592. void ProcessHitting(DWORD dwMotionKey, BYTE byEventIndex, CInstanceBase * pVictimInstance);
  593. void GetBlendingPosition(TPixelPosition * pPixelPosition);
  594. void SetBlendingPosition(const TPixelPosition & c_rPixelPosition);
  595. // Fishing
  596. void StartFishing(float frot);
  597. void StopFishing();
  598. void ReactFishing();
  599. void CatchSuccess();
  600. void CatchFail();
  601. BOOL GetFishingRot(int * pirot);
  602. // Render Mode
  603. void RestoreRenderMode();
  604. void SetAddRenderMode();
  605. void SetModulateRenderMode();
  606. void SetRenderMode(int iRenderMode);
  607. void SetAddColor(const D3DXCOLOR & c_rColor);
  608. // Position
  609. void SCRIPT_SetPixelPosition(float fx, float fy);
  610. void NEW_GetPixelPosition(TPixelPosition * pPixelPosition);
  611. // Rotation
  612. void NEW_LookAtFlyTarget();
  613. void NEW_LookAtDestInstance(CInstanceBase& rkInstDst);
  614. void NEW_LookAtDestPixelPosition(const TPixelPosition& c_rkPPosDst);
  615. float GetRotation();
  616. float GetAdvancingRotation();
  617. void SetRotation(float fRotation);
  618. void BlendRotation(float fRotation, float fBlendTime = 0.1f);
  619. void SetDirection(int dir);
  620. void BlendDirection(int dir, float blendTime);
  621. float GetDegreeFromDirection(int dir);
  622. // Motion
  623. // Motion Deque
  624. BOOL isLock();
  625. void SetMotionMode(int iMotionMode);
  626. int GetMotionMode(DWORD dwMotionIndex);
  627. // Motion
  628. // Pushing Motion
  629. void ResetLocalTime();
  630. void SetLoopMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f);
  631. void PushOnceMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f);
  632. void PushLoopMotion(WORD wMotion, float fBlendTime=0.1f, float fSpeedRatio=1.0f);
  633. void SetEndStopMotion();
  634. // Intersect
  635. bool IntersectDefendingSphere();
  636. bool IntersectBoundingBox();
  637. // Part
  638. //void SetParts(const WORD * c_pParts);
  639. void Refresh(DWORD dwMotIndex, bool isLoop);
  640. //void AttachEffectByID(DWORD dwParentPartIndex, const char * c_pszBoneName, DWORD dwEffectID, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // ¼ö¸íÀº ms´ÜÀ§ÀÔ´Ï´Ù.
  641. //void AttachEffectByName(DWORD dwParentPartIndex, const char * c_pszBoneName, const char * c_pszEffectName, int dwLife = CActorInstance::EFFECT_LIFE_INFINITE ); // ¼ö¸íÀº ms´ÜÀ§ÀÔ´Ï´Ù.
  642. float GetDistance(CInstanceBase * pkTargetInst);
  643. float GetDistance(const TPixelPosition & c_rPixelPosition);
  644. // ETC
  645. CActorInstance& GetGraphicThingInstanceRef();
  646. CActorInstance* GetGraphicThingInstancePtr();
  647. bool __Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos);
  648. bool __Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight);
  649. // 2004.07.25.myevan.ÀÌÆåÆ® ¾È³ª¿À´Â ¹®Á¦
  650. /////////////////////////////////////////////////////////////
  651. void __ClearAffectFlagContainer();
  652. void __ClearAffects();
  653. /////////////////////////////////////////////////////////////
  654. void __SetAffect(UINT eAffect, bool isVisible);
  655. void SetAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer);
  656. void __SetNormalAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer);
  657. void __SetStoneSmokeFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer);
  658. void SetEmoticon(UINT eEmoticon);
  659. void SetFishEmoticon();
  660. bool IsPossibleEmoticon();
  661. protected:
  662. UINT __LessRenderOrder_GetLODLevel();
  663. void __Initialize();
  664. void __InitializeRotationSpeed();
  665. void __Create_SetName(const SCreateData& c_rkCreateData);
  666. void __Create_SetWarpName(const SCreateData& c_rkCreateData);
  667. CInstanceBase* __GetMainInstancePtr();
  668. CInstanceBase* __FindInstancePtr(DWORD dwVID);
  669. bool __FindRaceType(DWORD dwRace, BYTE* pbType);
  670. DWORD __GetRaceType();
  671. bool __IsShapeAnimalWear();
  672. BOOL __IsChangableWeapon(int iWeaponID);
  673. void __EnableSkipCollision();
  674. void __DisableSkipCollision();
  675. void __ClearMainInstance();
  676. void __Shaman_SetParalysis(bool isParalysis);
  677. void __Warrior_SetGeomgyeongAffect(bool isVisible);
  678. void __Assassin_SetEunhyeongAffect(bool isVisible);
  679. void __SetReviveInvisibilityAffect(bool isVisible);
  680. BOOL __CanProcessNetworkStatePacket();
  681. bool __IsInDustRange();
  682. // Emotion
  683. void __ProcessFunctionEmotion(DWORD dwMotionNumber, DWORD dwTargetVID, const TPixelPosition & c_rkPosDst);
  684. void __EnableChangingTCPState();
  685. void __DisableChangingTCPState();
  686. BOOL __IsEnableTCPProcess(UINT eCurFunc);
  687. // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î º¯°æ
  688. bool __CanRender();
  689. bool __IsInViewFrustum();
  690. // HORSE
  691. void __AttachHorseSaddle();
  692. void __DetachHorseSaddle();
  693. struct SHORSE
  694. {
  695. bool m_isMounting;
  696. CActorInstance* m_pkActor;
  697. SHORSE();
  698. ~SHORSE();
  699. void Destroy();
  700. void Create(const TPixelPosition& c_rkPPos, UINT eRace, UINT eHitEffect);
  701. void SetAttackSpeed(UINT uAtkSpd);
  702. void SetMoveSpeed(UINT uMovSpd);
  703. void Deform();
  704. void Render();
  705. CActorInstance& GetActorRef();
  706. CActorInstance* GetActorPtr();
  707. bool IsMounting();
  708. bool CanAttack();
  709. bool CanUseSkill();
  710. UINT GetLevel();
  711. bool IsNewMount();
  712. void __Initialize();
  713. } m_kHorse;
  714. protected:
  715. // Blend Mode
  716. void __SetBlendRenderingMode();
  717. void __SetAlphaValue(float fAlpha);
  718. float __GetAlphaValue();
  719. void __ComboProcess();
  720. void MovementProcess();
  721. void TodoProcess();
  722. void StateProcess();
  723. void AttackProcess();
  724. void StartWalking();
  725. float GetLocalTime();
  726. void RefreshState(DWORD dwMotIndex, bool isLoop);
  727. void RefreshActorInstance();
  728. protected:
  729. void OnSyncing();
  730. void OnWaiting();
  731. void OnMoving();
  732. void NEW_SetCurPixelPosition(const TPixelPosition& c_rkPPosDst);
  733. void NEW_SetSrcPixelPosition(const TPixelPosition& c_rkPPosDst);
  734. void NEW_SetDstPixelPosition(const TPixelPosition& c_rkPPosDst);
  735. void NEW_SetDstPixelPositionZ(FLOAT z);
  736. const TPixelPosition& NEW_GetCurPixelPositionRef();
  737. const TPixelPosition& NEW_GetSrcPixelPositionRef();
  738. public:
  739. const TPixelPosition& NEW_GetDstPixelPositionRef();
  740. protected:
  741. BOOL m_isTextTail;
  742. // Instance Data
  743. std::string m_stName;
  744. DWORD m_awPart[CRaceData::PART_MAX_NUM];
  745. DWORD m_dwLevel;
  746. DWORD m_dwEmpireID;
  747. DWORD m_dwGuildID;
  748. protected:
  749. CAffectFlagContainer m_kAffectFlagContainer;
  750. DWORD m_adwCRCAffectEffect[AFFECT_NUM];
  751. UINT __GetRefinedEffect(CItemData* pItem);
  752. void __ClearWeaponRefineEffect();
  753. void __ClearArmorRefineEffect();
  754. protected:
  755. void __AttachSelectEffect();
  756. void __DetachSelectEffect();
  757. void __AttachTargetEffect();
  758. void __DetachTargetEffect();
  759. void __AttachEmpireEffect(DWORD eEmpire);
  760. protected:
  761. struct SEffectContainer
  762. {
  763. typedef std::map<DWORD, DWORD> Dict;
  764. Dict m_kDct_dwEftID;
  765. } m_kEffectContainer;
  766. void __EffectContainer_Initialize();
  767. void __EffectContainer_Destroy();
  768. DWORD __EffectContainer_AttachEffect(DWORD eEffect);
  769. void __EffectContainer_DetachEffect(DWORD eEffect);
  770. SEffectContainer::Dict& __EffectContainer_GetDict();
  771. protected:
  772. struct SStoneSmoke
  773. {
  774. DWORD m_dwEftID;
  775. } m_kStoneSmoke;
  776. void __StoneSmoke_Inialize();
  777. void __StoneSmoke_Destroy();
  778. void __StoneSmoke_Create(DWORD eSmoke);
  779. protected:
  780. // Emoticon
  781. //DWORD m_adwCRCEmoticonEffect[EMOTICON_NUM];
  782. BYTE m_eType;
  783. BYTE m_eRaceType;
  784. DWORD m_eShape;
  785. DWORD m_dwRace;
  786. DWORD m_dwVirtualNumber;
  787. short m_sAlignment;
  788. BYTE m_byPKMode;
  789. bool m_isKiller;
  790. bool m_isPartyMember;
  791. // Movement
  792. int m_iRotatingDirection;
  793. DWORD m_dwAdvActorVID;
  794. DWORD m_dwLastDmgActorVID;
  795. LONG m_nAverageNetworkGap;
  796. DWORD m_dwNextUpdateHeightTime;
  797. bool m_isGoing;
  798. TPixelPosition m_kPPosDust;
  799. DWORD m_dwLastComboIndex;
  800. DWORD m_swordRefineEffectRight;
  801. DWORD m_swordRefineEffectLeft;
  802. DWORD m_armorRefineEffect;
  803. struct SMoveAfterFunc
  804. {
  805. UINT eFunc;
  806. UINT uArg;
  807. // For Emotion Function
  808. UINT uArgExpanded;
  809. TPixelPosition kPosDst;
  810. };
  811. SMoveAfterFunc m_kMovAfterFunc;
  812. float m_fDstRot;
  813. float m_fAtkPosTime;
  814. float m_fRotSpd;
  815. float m_fMaxRotSpd;
  816. BOOL m_bEnableTCPState;
  817. // Graphic Instance
  818. CActorInstance m_GraphicThingInstance;
  819. protected:
  820. struct SCommand
  821. {
  822. DWORD m_dwChkTime;
  823. DWORD m_dwCmdTime;
  824. float m_fDstRot;
  825. UINT m_eFunc;
  826. UINT m_uArg;
  827. UINT m_uTargetVID;
  828. TPixelPosition m_kPPosDst;
  829. };
  830. typedef std::list<SCommand> CommandQueue;
  831. DWORD m_dwBaseChkTime;
  832. DWORD m_dwBaseCmdTime;
  833. DWORD m_dwSkipTime;
  834. CommandQueue m_kQue_kCmdNew;
  835. BOOL m_bDamageEffectType;
  836. struct SEffectDamage
  837. {
  838. DWORD damage;
  839. BYTE flag;
  840. BOOL bSelf;
  841. BOOL bTarget;
  842. };
  843. typedef std::list<SEffectDamage> CommandDamageQueue;
  844. CommandDamageQueue m_DamageQueue;
  845. void ProcessDamage();
  846. public:
  847. void AddDamageEffect(DWORD damage,BYTE flag,BOOL bSelf,BOOL bTarget);
  848. protected:
  849. struct SWarrior
  850. {
  851. DWORD m_dwGeomgyeongEffect;
  852. };
  853. SWarrior m_kWarrior;
  854. void __Warrior_Initialize();
  855. public:
  856. static void ClearPVPKeySystem();
  857. static void InsertPVPKey(DWORD dwSrcVID, DWORD dwDstVID);
  858. static void InsertPVPReadyKey(DWORD dwSrcVID, DWORD dwDstVID);
  859. static void RemovePVPKey(DWORD dwSrcVID, DWORD dwDstVID);
  860. static void InsertGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID);
  861. static void RemoveGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID);
  862. static void InsertDUELKey(DWORD dwSrcVID, DWORD dwDstVID);
  863. UINT GetNameColorIndex();
  864. const D3DXCOLOR& GetNameColor();
  865. const D3DXCOLOR& GetTitleColor();
  866. protected:
  867. static DWORD __GetPVPKey(DWORD dwSrcVID, DWORD dwDstVID);
  868. static bool __FindPVPKey(DWORD dwSrcVID, DWORD dwDstVID);
  869. static bool __FindPVPReadyKey(DWORD dwSrcVID, DWORD dwDstVID);
  870. static bool __FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID);
  871. static bool __FindDUELKey(DWORD dwSrcGuildID, DWORD dwDstGuildID);
  872. protected:
  873. CActorInstance::IEventHandler* GetEventHandlerPtr();
  874. CActorInstance::IEventHandler& GetEventHandlerRef();
  875. protected:
  876. static float __GetBackgroundHeight(float x, float y);
  877. static DWORD __GetShadowMapColor(float x, float y);
  878. public:
  879. static void ResetPerformanceCounter();
  880. static void GetInfo(std::string* pstInfo);
  881. public:
  882. static CInstanceBase* New();
  883. static void Delete(CInstanceBase* pkInst);
  884. static CDynamicPool<CInstanceBase> ms_kPool;
  885. protected:
  886. static DWORD ms_dwUpdateCounter;
  887. static DWORD ms_dwRenderCounter;
  888. static DWORD ms_dwDeformCounter;
  889. public:
  890. DWORD GetDuelMode();
  891. void SetDuelMode(DWORD type);
  892. protected:
  893. DWORD m_dwDuelMode;
  894. DWORD m_dwEmoticonTime;
  895. };
  896. inline int RaceToJob(int race)
  897. {
  898. const int JOB_NUM = 4;
  899. return race % JOB_NUM;
  900. }
  901. inline int RaceToSex(int race)
  902. {
  903. switch (race)
  904. {
  905. case 0:
  906. case 2:
  907. case 5:
  908. case 7:
  909. return 1;
  910. case 1:
  911. case 3:
  912. case 4:
  913. case 6:
  914. return 0;
  915. }
  916. return 0;
  917. }

INSTANCEBASE.H