MrP0wers

InstanceBase.cpp

Jan 11th, 2026
36
0
Never
8
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 76.53 KB | None | 0 0
  1. #include "StdAfx.h"
  2. #include "InstanceBase.h"
  3. #include "PythonBackground.h"
  4. #include "PythonNonPlayer.h"
  5. #include "PythonPlayer.h"
  6. #include "PythonSystem.h"
  7. #include "PythonCharacterManager.h"
  8. #include "AbstractPlayer.h"
  9. #include "AbstractApplication.h"
  10. #include "packet.h"
  11.  
  12. #include "../eterlib/StateManager.h"
  13. #include "../gamelib/ItemManager.h"
  14.  
  15. BOOL HAIR_COLOR_ENABLE=FALSE;
  16. BOOL USE_ARMOR_SPECULAR=FALSE;
  17. BOOL RIDE_HORSE_ENABLE=TRUE;
  18.  
  19. const float c_fDefaultRotationSpeed = 1200.0f;
  20. const float c_fDefaultHorseRotationSpeed = 300.0f;
  21.  
  22. // #define NO_MOUNT_SKILL_AND_ATTACK_CHECK
  23.  
  24. bool IsWall(unsigned race)
  25. {
  26. switch (race)
  27. {
  28. case 14201:
  29. case 14202:
  30. case 14203:
  31. case 14204:
  32. return true;
  33. break;
  34. }
  35.  
  36. return false;
  37. }
  38.  
  39. CInstanceBase::SHORSE::SHORSE()
  40. {
  41. __Initialize();
  42. }
  43.  
  44. CInstanceBase::SHORSE::~SHORSE()
  45. {
  46. assert(m_pkActor==NULL);
  47. }
  48.  
  49. void CInstanceBase::SHORSE::__Initialize()
  50. {
  51. m_isMounting=false;
  52. m_pkActor=NULL;
  53. }
  54.  
  55. void CInstanceBase::SHORSE::SetAttackSpeed(UINT uAtkSpd)
  56. {
  57. if (!IsMounting())
  58. return;
  59.  
  60. CActorInstance& rkActor=GetActorRef();
  61. rkActor.SetAttackSpeed(uAtkSpd/100.0f);
  62. }
  63.  
  64. void CInstanceBase::SHORSE::SetMoveSpeed(UINT uMovSpd)
  65. {
  66. if (!IsMounting())
  67. return;
  68.  
  69. CActorInstance& rkActor=GetActorRef();
  70. rkActor.SetMoveSpeed(uMovSpd/100.0f);
  71. }
  72.  
  73. void CInstanceBase::SHORSE::Create(const TPixelPosition& c_rkPPos, UINT eRace, UINT eHitEffect)
  74. {
  75. assert(NULL==m_pkActor && "CInstanceBase::SHORSE::Create - ALREADY MOUNT");
  76.  
  77. m_pkActor=new CActorInstance;
  78.  
  79. CActorInstance& rkActor=GetActorRef();
  80. rkActor.SetEventHandler(CActorInstance::IEventHandler::GetEmptyPtr());
  81.  
  82. if (!rkActor.SetRace(eRace))
  83. {
  84. delete m_pkActor;
  85. m_pkActor=NULL;
  86.  
  87. return;
  88. }
  89.  
  90. rkActor.SetShape(0);
  91. rkActor.SetBattleHitEffect(eHitEffect);
  92. rkActor.SetAlphaValue(0.0f);
  93. rkActor.BlendAlphaValue(1.0f, 0.5f);
  94. rkActor.SetMoveSpeed(1.0f);
  95. rkActor.SetAttackSpeed(1.0f);
  96. rkActor.SetMotionMode(CRaceMotionData::MODE_GENERAL);
  97. rkActor.Stop();
  98. rkActor.RefreshActorInstance();
  99.  
  100. rkActor.SetCurPixelPosition(c_rkPPos);
  101.  
  102. m_isMounting=true;
  103. }
  104.  
  105. void CInstanceBase::SHORSE::Destroy()
  106. {
  107. if (m_pkActor)
  108. {
  109. m_pkActor->Destroy();
  110. delete m_pkActor;
  111. }
  112.  
  113. __Initialize();
  114. }
  115.  
  116. CActorInstance& CInstanceBase::SHORSE::GetActorRef()
  117. {
  118. assert(NULL!=m_pkActor && "CInstanceBase::SHORSE::GetActorRef");
  119. return *m_pkActor;
  120. }
  121.  
  122. CActorInstance* CInstanceBase::SHORSE::GetActorPtr()
  123. {
  124. return m_pkActor;
  125. }
  126.  
  127. enum eMountType {MOUNT_TYPE_NONE=0, MOUNT_TYPE_NORMAL=1, MOUNT_TYPE_COMBAT=2, MOUNT_TYPE_MILITARY=3};
  128. eMountType GetMountLevelByVnum(DWORD dwMountVnum, bool IsNew)
  129. {
  130. if (!dwMountVnum)
  131. return MOUNT_TYPE_NONE;
  132.  
  133. switch (dwMountVnum)
  134. {
  135. case 20107: // normal military horse (no guild)
  136. case 20108: // normal military horse (guild member)
  137. case 20109: // normal military horse (guild master)
  138. if (IsNew)
  139. return MOUNT_TYPE_NONE;
  140.  
  141. case 20110: // Classic Boar
  142. case 20111: // Classic Wolf
  143. case 20112: // Classic Tiger
  144. case 20113: // Classic Lion
  145. case 20114: // White Lion
  146.  
  147. case 20115: // Wild Battle Boar
  148. case 20116: // Fight Wolf
  149. case 20117: // Storm Tiger
  150. case 20118: // Battle Lion (bugged)
  151. case 20205: // Wild Battle Boar (alternative)
  152. case 20206: // Fight Wolf (alternative)
  153. case 20207: // Storm Tiger (alternative)
  154. case 20208: // Battle Lion (bugged) (alternative)
  155.  
  156. case 20120: // blue
  157. case 20121: // dark red
  158. case 20122: // gold
  159. case 20123: // green
  160. case 20124: // pied
  161. case 20125: // white
  162.  
  163. case 20209: // Royal Boar
  164. case 20210: // Royal Wolf
  165. case 20211: // Royal Tiger
  166. case 20212: // Royal Lion
  167.  
  168. case 20215: // Rudolph m Lv3 (yes skill, yes atk)
  169. case 20218: // Rudolph f Lv3 (yes skill, yes atk)
  170. case 20225: // Dyno Lv3 (yes skill, yes atk)
  171. case 20230: // Turkey Lv3 (yes skill, yes atk)
  172. return MOUNT_TYPE_MILITARY;
  173. break;
  174.  
  175. case 20104: // normal combat horse (no guild)
  176. case 20105: // normal combat horse (guild member)
  177. case 20106: // normal combat horse (guild master)
  178. if (IsNew)
  179. return MOUNT_TYPE_NONE;
  180.  
  181. case 20119: // Black Horse (no skill, yes atk)
  182. case 20214: // Rudolph m Lv2 (no skill, yes atk)
  183. case 20217: // Rudolph f Lv2 (no skill, yes atk)
  184. case 20219: // Equus Porphyreus (no skill, yes atk)
  185. case 20220: // Comet (no skill, yes atk)
  186. case 20221: // Polar Predator (no skill, yes atk)
  187. case 20222: // Armoured Panda (no skill, yes atk)
  188. case 20224: // Dyno Lv2 (no skill, yes atk)
  189. case 20226: // Nightmare (no skill, yes atk)
  190. case 20227: // Unicorn (no skill, yes atk)
  191. case 20229: // Turkey Lv2 (no skill, yes atk)
  192. case 20231: // Leopard (no skill, yes atk)
  193. case 20232: // Black Panther (no skill, yes atk)
  194. return MOUNT_TYPE_COMBAT;
  195. break;
  196.  
  197. case 20101: // normal beginner horse (no guild)
  198. case 20102: // normal beginner horse (guild member)
  199. case 20103: // normal beginner horse (guild master)
  200. if (IsNew)
  201. return MOUNT_TYPE_NONE;
  202.  
  203. case 20213: // Rudolph m Lv1 (no skill, no atk)
  204. case 20216: // Rudolph f Lv1 (no skill, no atk)
  205.  
  206. case 20201: // Boar Lv1 (no skill, no atk)
  207. case 20202: // Wolf Lv1 (no skill, no atk)
  208. case 20203: // Tiger Lv1 (no skill, no atk)
  209. case 20204: // Lion Lv1 (no skill, no atk)
  210.  
  211. case 20223: // Dyno Lv1 (no skill, no atk)
  212. case 20228: // Turkey Lv1 (no skill, no atk)
  213. return MOUNT_TYPE_NORMAL;
  214. break;
  215.  
  216. default:
  217. return MOUNT_TYPE_NONE;
  218. break;
  219. }
  220. }
  221.  
  222. UINT CInstanceBase::SHORSE::GetLevel()
  223. {
  224. if (m_pkActor)
  225. {
  226.  
  227. #ifndef NO_MOUNT_SKILL_AND_ATTACK_CHECK
  228. return static_cast<UINT>(GetMountLevelByVnum(m_pkActor->GetRace(), false));
  229. #else
  230. return (m_pkActor->GetRace()) ? MOUNT_TYPE_MILITARY : MOUNT_TYPE_NONE;
  231. #endif
  232.  
  233. }
  234.  
  235. return 0;
  236. }
  237.  
  238. bool CInstanceBase::SHORSE::IsNewMount()
  239. {
  240. #ifndef NO_MOUNT_SKILL_AND_ATTACK_CHECK
  241. if (m_pkActor)
  242. {
  243. DWORD dwMountVnum = m_pkActor->GetRace();
  244. eMountType mountType = GetMountLevelByVnum(dwMountVnum, true);
  245. return (mountType != MOUNT_TYPE_NONE) && (mountType != MOUNT_TYPE_NORMAL);
  246. }
  247. #endif
  248.  
  249. return false;
  250. }
  251.  
  252. bool CInstanceBase::SHORSE::CanUseSkill()
  253. {
  254. if (IsMounting())
  255. return 2 < GetLevel();
  256.  
  257. return true;
  258. }
  259.  
  260. bool CInstanceBase::SHORSE::CanAttack()
  261. {
  262. if (IsMounting())
  263. if (GetLevel()<=1)
  264. return false;
  265.  
  266. return true;
  267. }
  268.  
  269. bool CInstanceBase::SHORSE::IsMounting()
  270. {
  271. return m_isMounting;
  272. }
  273.  
  274. void CInstanceBase::SHORSE::Deform()
  275. {
  276. if (!IsMounting())
  277. return;
  278.  
  279. CActorInstance& rkActor=GetActorRef();
  280. rkActor.INSTANCEBASE_Deform();
  281. }
  282.  
  283. void CInstanceBase::SHORSE::Render()
  284. {
  285. if (!IsMounting())
  286. return;
  287.  
  288. CActorInstance& rkActor=GetActorRef();
  289. rkActor.Render();
  290. }
  291.  
  292. void CInstanceBase::__AttachHorseSaddle()
  293. {
  294. if (!IsMountingHorse())
  295. return;
  296.  
  297. m_kHorse.m_pkActor->AttachModelInstance(CRaceData::PART_MAIN, "saddle", m_GraphicThingInstance, CRaceData::PART_MAIN);
  298. }
  299.  
  300. void CInstanceBase::__DetachHorseSaddle()
  301. {
  302. if (!IsMountingHorse())
  303. return;
  304.  
  305. m_kHorse.m_pkActor->DetachModelInstance(CRaceData::PART_MAIN, m_GraphicThingInstance, CRaceData::PART_MAIN);
  306. }
  307.  
  308. void CInstanceBase::BlockMovement()
  309. {
  310. m_GraphicThingInstance.BlockMovement();
  311. }
  312.  
  313. bool CInstanceBase::IsBlockObject(const CGraphicObjectInstance& c_rkBGObj)
  314. {
  315. return m_GraphicThingInstance.IsBlockObject(c_rkBGObj);
  316. }
  317.  
  318. bool CInstanceBase::AvoidObject(const CGraphicObjectInstance& c_rkBGObj)
  319. {
  320. return m_GraphicThingInstance.AvoidObject(c_rkBGObj);
  321. }
  322.  
  323. bool __ArmorVnumToShape(int iVnum, DWORD * pdwShape)
  324. {
  325. *pdwShape = iVnum;
  326.  
  327. if (0 == iVnum || 1 == iVnum)
  328. return false;
  329.  
  330. if (!USE_ARMOR_SPECULAR)
  331. return false;
  332.  
  333. CItemData * pItemData;
  334. if (!CItemManager::Instance().GetItemDataPointer(iVnum, &pItemData))
  335. return false;
  336.  
  337. enum
  338. {
  339. SHAPE_VALUE_SLOT_INDEX = 3,
  340. };
  341.  
  342. *pdwShape = pItemData->GetValue(SHAPE_VALUE_SLOT_INDEX);
  343.  
  344. return true;
  345. }
  346.  
  347. class CActorInstanceBackground : public IBackground
  348. {
  349. public:
  350. CActorInstanceBackground() {}
  351. virtual ~CActorInstanceBackground() {}
  352.  
  353. bool IsBlock(int x, int y)
  354. {
  355. CPythonBackground& rkBG=CPythonBackground::Instance();
  356. return rkBG.isAttrOn(x, y, CTerrainImpl::ATTRIBUTE_BLOCK);
  357. }
  358. };
  359.  
  360. static CActorInstanceBackground gs_kActorInstBG;
  361.  
  362. bool CInstanceBase::LessRenderOrder(CInstanceBase* pkInst)
  363. {
  364. int nMainAlpha=(__GetAlphaValue() < 1.0f) ? 1 : 0;
  365. int nTestAlpha=(pkInst->__GetAlphaValue() < 1.0f) ? 1 : 0;
  366.  
  367. if (nMainAlpha < nTestAlpha)
  368. return true;
  369.  
  370. if (nMainAlpha > nTestAlpha)
  371. return false;
  372.  
  373. if (GetRace()<pkInst->GetRace())
  374. return true;
  375.  
  376. if (GetRace()>pkInst->GetRace())
  377. return false;
  378.  
  379. if (GetShape()<pkInst->GetShape())
  380. return true;
  381.  
  382. if (GetShape()>pkInst->GetShape())
  383. return false;
  384.  
  385. UINT uLeftLODLevel=__LessRenderOrder_GetLODLevel();
  386. UINT uRightLODLevel=pkInst->__LessRenderOrder_GetLODLevel();
  387.  
  388. if (uLeftLODLevel<uRightLODLevel)
  389. return true;
  390.  
  391. if (uLeftLODLevel>uRightLODLevel)
  392. return false;
  393.  
  394. if (m_awPart[CRaceData::PART_WEAPON]<pkInst->m_awPart[CRaceData::PART_WEAPON])
  395. return true;
  396.  
  397. return false;
  398. }
  399.  
  400. UINT CInstanceBase::__LessRenderOrder_GetLODLevel()
  401. {
  402. CGrannyLODController* pLODCtrl=m_GraphicThingInstance.GetLODControllerPointer(0);
  403. if (!pLODCtrl)
  404. return 0;
  405.  
  406. return pLODCtrl->GetLODLevel();
  407. }
  408.  
  409. bool CInstanceBase::__Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight)
  410. {
  411. long lHeight;
  412. if (!CPythonBackground::Instance().GetWaterHeight(int(c_rkPPos.x), int(c_rkPPos.y), &lHeight))
  413. return false;
  414.  
  415. *pfHeight = float(lHeight);
  416.  
  417. return true;
  418. }
  419.  
  420. bool CInstanceBase::__Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos)
  421. {
  422. return CPythonBackground::Instance().isAttrOn(c_rkPPos.x, c_rkPPos.y, CTerrainImpl::ATTRIBUTE_WATER);
  423. }
  424.  
  425. const float PC_DUST_RANGE = 2000.0f;
  426. const float NPC_DUST_RANGE = 1000.0f;
  427.  
  428. DWORD CInstanceBase::ms_dwUpdateCounter=0;
  429. DWORD CInstanceBase::ms_dwRenderCounter=0;
  430. DWORD CInstanceBase::ms_dwDeformCounter=0;
  431.  
  432. CDynamicPool<CInstanceBase> CInstanceBase::ms_kPool;
  433.  
  434. bool CInstanceBase::__IsInDustRange()
  435. {
  436. if (!__IsExistMainInstance())
  437. return false;
  438.  
  439. CInstanceBase* pkInstMain=__GetMainInstancePtr();
  440.  
  441. float fDistance=NEW_GetDistanceFromDestInstance(*pkInstMain);
  442.  
  443. if (IsPC())
  444. {
  445. if (fDistance<=PC_DUST_RANGE)
  446. return true;
  447. }
  448.  
  449. if (fDistance<=NPC_DUST_RANGE)
  450. return true;
  451.  
  452. return false;
  453. }
  454.  
  455. void CInstanceBase::__EnableSkipCollision()
  456. {
  457. if (__IsMainInstance())
  458. {
  459. TraceError ("CInstanceBase::__EnableSkipCollision - You should not skip your own collisions!!");
  460. return;
  461. }
  462.  
  463. m_GraphicThingInstance.EnableSkipCollision();
  464. }
  465.  
  466. void CInstanceBase::__DisableSkipCollision()
  467. {
  468. m_GraphicThingInstance.DisableSkipCollision();
  469. }
  470.  
  471. DWORD CInstanceBase::__GetShadowMapColor(float x, float y)
  472. {
  473. CPythonBackground& rkBG=CPythonBackground::Instance();
  474.  
  475. return rkBG.GetShadowMapColor(x, y);
  476. }
  477.  
  478. float CInstanceBase::__GetBackgroundHeight(float x, float y)
  479. {
  480. CPythonBackground& rkBG=CPythonBackground::Instance();
  481.  
  482. return rkBG.GetHeight(x, y);
  483. }
  484.  
  485. #ifdef __MOVIE_MODE__
  486. BOOL CInstanceBase::IsMovieMode()
  487. {
  488. if (IsAffect(AFFECT_INVISIBILITY))
  489. return true;
  490.  
  491. return false;
  492. }
  493. #endif
  494.  
  495. BOOL CInstanceBase::IsInvisibility()
  496. {
  497. if (IsAffect(AFFECT_INVISIBILITY))
  498. return true;
  499.  
  500. return false;
  501. }
  502.  
  503. BOOL CInstanceBase::IsStealth()
  504. {
  505. if (IsAffect(AFFECT_EUNHYEONG))
  506. return true;
  507.  
  508. return false;
  509. }
  510.  
  511.  
  512. BOOL CInstanceBase::IsParalysis()
  513. {
  514. return m_GraphicThingInstance.IsParalysis();
  515. }
  516.  
  517. BOOL CInstanceBase::IsGameMaster()
  518. {
  519. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
  520. return true;
  521.  
  522. return false;
  523. }
  524.  
  525. #ifdef ENABLE_GM_AFFECTS
  526. BOOL CInstanceBase::ApplyGMAffectVisuals()
  527. {
  528. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_GM))
  529. {
  530. return true;
  531. }
  532.  
  533. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_SGM))
  534. {
  535. return true;
  536. }
  537.  
  538. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_SGA))
  539. {
  540. return true;
  541. }
  542.  
  543. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_SA))
  544. {
  545. return true;
  546. }
  547.  
  548. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_GA))
  549. {
  550. return true;
  551. }
  552.  
  553. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_TEH))
  554. {
  555. return true;
  556. }
  557.  
  558. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_DEV))
  559. {
  560. return true;
  561. }
  562.  
  563. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_GFX))
  564. {
  565. return true;
  566. }
  567.  
  568. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_H))
  569. {
  570. return true;
  571. }
  572.  
  573. return false;
  574. }
  575. #endif
  576.  
  577. #ifdef ENABLE_VIP_SYSTEM
  578. BOOL CInstanceBase::IsVIP()
  579. {
  580. if (m_kAffectFlagContainer.IsSet(AFFECT_VIP))
  581. {
  582. return true;
  583. }
  584.  
  585. return false;
  586. }
  587. #endif
  588.  
  589. #ifdef ENABLE_PREMIUM_SYSTEM
  590. BOOL CInstanceBase::IsPREMIUM()
  591. {
  592. if (m_kAffectFlagContainer.IsSet(AFFECT_PREMIUM))
  593. {
  594. return true;
  595. }
  596.  
  597. return false;
  598. }
  599. #endif
  600.  
  601. BOOL CInstanceBase::IsSameEmpire(CInstanceBase& rkInstDst)
  602. {
  603. if (0 == rkInstDst.m_dwEmpireID)
  604. return TRUE;
  605.  
  606. if (IsGameMaster())
  607. return TRUE;
  608.  
  609. #ifdef ENABLE_VIP_SYSTEM
  610. if (IsVIP())
  611. return TRUE;
  612. #endif
  613.  
  614. #ifdef ENABLE_PREMIUM_SYSTEM
  615. if (IsPREMIUM())
  616. return TRUE;
  617. #endif
  618.  
  619. #ifdef ENABLE_GM_AFFECTS
  620. if (ApplyGMAffectVisuals())
  621. return TRUE;
  622. #endif
  623.  
  624. if (rkInstDst.IsGameMaster())
  625. return TRUE;
  626.  
  627. #ifdef ENABLE_VIP_SYSTEM
  628. if (rkInstDst.IsVIP())
  629. return TRUE;
  630. #endif
  631.  
  632. #ifdef ENABLE_PREMIUM_SYSTEM
  633. if (rkInstDst.IsPREMIUM())
  634. return TRUE;
  635. #endif
  636.  
  637. #ifdef ENABLE_GM_AFFECTS
  638. if (rkInstDst.ApplyGMAffectVisuals())
  639. return TRUE;
  640. #endif
  641.  
  642. if (rkInstDst.m_dwEmpireID==m_dwEmpireID)
  643. return TRUE;
  644.  
  645. return FALSE;
  646. }
  647.  
  648. DWORD CInstanceBase::GetEmpireID()
  649. {
  650. return m_dwEmpireID;
  651. }
  652.  
  653. #if defined(WJ_SHOW_MOB_INFO)
  654. DWORD CInstanceBase::GetAIFlag()
  655. {
  656. return m_dwAIFlag;
  657. }
  658. #endif
  659.  
  660. DWORD CInstanceBase::GetGuildID()
  661. {
  662. return m_dwGuildID;
  663. }
  664.  
  665. #ifdef ENABLE_TITLE_SYSTEM
  666. int CInstanceBase::GetTitleID()
  667. {
  668. return m_iTitleID;
  669. }
  670. #endif
  671.  
  672. int CInstanceBase::GetAlignment()
  673. {
  674. return m_sAlignment;
  675. }
  676.  
  677. UINT CInstanceBase::GetAlignmentGrade()
  678. {
  679. if (m_sAlignment >= 12000)
  680. return 0;
  681.  
  682. else if (m_sAlignment >= 8000)
  683. return 1;
  684.  
  685. else if (m_sAlignment >= 4000)
  686. return 2;
  687.  
  688. else if (m_sAlignment >= 1000)
  689. return 3;
  690.  
  691. else if (m_sAlignment >= 0)
  692. return 4;
  693.  
  694. else if (m_sAlignment > -4000)
  695. return 5;
  696.  
  697. else if (m_sAlignment > -8000)
  698. return 6;
  699.  
  700. else if (m_sAlignment > -12000)
  701. return 7;
  702.  
  703. return 8;
  704. }
  705.  
  706. int CInstanceBase::GetAlignmentType()
  707. {
  708. switch (GetAlignmentGrade())
  709. {
  710. case 0:
  711. case 1:
  712. case 2:
  713. case 3:
  714. {
  715. return ALIGNMENT_TYPE_WHITE;
  716. break;
  717. }
  718.  
  719. case 5:
  720. case 6:
  721. case 7:
  722. case 8:
  723. {
  724. return ALIGNMENT_TYPE_DARK;
  725. break;
  726. }
  727. }
  728.  
  729. return ALIGNMENT_TYPE_NORMAL;
  730. }
  731.  
  732. BYTE CInstanceBase::GetPKMode()
  733. {
  734. return m_byPKMode;
  735. }
  736.  
  737. bool CInstanceBase::IsKiller()
  738. {
  739. return m_isKiller;
  740. }
  741.  
  742. bool CInstanceBase::IsPartyMember()
  743. {
  744. return m_isPartyMember;
  745. }
  746.  
  747. BOOL CInstanceBase::IsInSafe()
  748. {
  749. const TPixelPosition& c_rkPPosCur=m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
  750. if (CPythonBackground::Instance().isAttrOn(c_rkPPosCur.x, c_rkPPosCur.y, CTerrainImpl::ATTRIBUTE_BANPK))
  751. return TRUE;
  752.  
  753. return FALSE;
  754. }
  755.  
  756. float CInstanceBase::CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst)
  757. {
  758. const TPixelPosition& c_rkPPosSrc=m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
  759. return SPixelPosition_CalculateDistanceSq3d(c_rkPPosSrc, c_rkPPosDst);
  760. }
  761.  
  762. #ifdef ENABLE_HIDE_PET
  763. BOOL CInstanceBase::IsPet()
  764. {
  765. if (GetRace() >= 34001 && GetRace() <= 34999)
  766. return true;
  767.  
  768. return false;
  769. }
  770. #endif
  771.  
  772. #ifdef ENABLE_HIDE_MOUNT
  773. BOOL CInstanceBase::IsMount()
  774. {
  775. if (GetRace() >= 20110 && GetRace() <= 20299)
  776. return true;
  777.  
  778. return false;
  779. }
  780. #endif
  781.  
  782. #ifdef ENABLE_HIDE_SHOPS
  783. BOOL CInstanceBase::IsShops()
  784. {
  785. if (GetRace() >= 30000 && GetRace() <= 30007)
  786. return true;
  787.  
  788. return false;
  789. }
  790. #endif
  791.  
  792. void CInstanceBase::OnSelected()
  793. {
  794. #ifdef __MOVIE_MODE__
  795. if (!__IsExistMainInstance())
  796. return;
  797. #endif
  798.  
  799. if (IsStoneDoor())
  800. return;
  801.  
  802. if (IsDead())
  803. return;
  804.  
  805. if (IsEnemy() || IsStone())
  806. {
  807. __AttachSelectEffectMonster();
  808. }
  809.  
  810. if (IsPC() || IsNPC())
  811. {
  812. if (m_dwEmpireID == 1)
  813. {
  814. __AttachSelectEffectShinsoo();
  815. }
  816.  
  817. else if (m_dwEmpireID == 2)
  818. {
  819. __AttachSelectEffectChunjo();
  820. }
  821.  
  822. else if (m_dwEmpireID == 3)
  823. {
  824. __AttachSelectEffectJinnos();
  825. }
  826. }
  827. }
  828.  
  829. void CInstanceBase::OnUnselected()
  830. {
  831. if (IsPC() || IsNPC())
  832. {
  833. if (m_dwEmpireID == 1)
  834. {
  835. __DetachSelectEffectShinsoo();
  836. }
  837.  
  838. else if (m_dwEmpireID == 2)
  839. {
  840. __DetachSelectEffectChunjo();
  841. }
  842.  
  843. else if (m_dwEmpireID == 3)
  844. {
  845. __DetachSelectEffectJinnos();
  846. }
  847. }
  848.  
  849. if (IsEnemy())
  850. {
  851. __DetachSelectEffectMonster();
  852. }
  853. }
  854.  
  855. void CInstanceBase::OnTargeted()
  856. {
  857. #ifdef __MOVIE_MODE__
  858. if (!__IsExistMainInstance())
  859. return;
  860. #endif
  861.  
  862. if (IsStoneDoor())
  863. return;
  864.  
  865. if (IsDead())
  866. return;
  867.  
  868. if (IsEnemy() || IsStone())
  869. {
  870. __AttachTargetEffectMonster();
  871. }
  872.  
  873. if (IsPC() || IsNPC())
  874. {
  875. if (m_dwEmpireID == 1)
  876. {
  877. __AttachTargetEffectShinsoo();
  878. }
  879.  
  880. else if (m_dwEmpireID == 2)
  881. {
  882. __AttachTargetEffectChunjo();
  883. }
  884.  
  885. else if (m_dwEmpireID == 3)
  886. {
  887. __AttachTargetEffectJinnos();
  888. }
  889. }
  890. }
  891.  
  892. void CInstanceBase::OnUntargeted()
  893. {
  894. if (IsPC() || IsNPC())
  895. {
  896. if (m_dwEmpireID == 1)
  897. {
  898. __DetachTargetEffectShinsoo();
  899. }
  900.  
  901. else if (m_dwEmpireID == 2)
  902. {
  903. __DetachTargetEffectChunjo();
  904. }
  905.  
  906. else if (m_dwEmpireID == 3)
  907. {
  908. __DetachTargetEffectJinnos();
  909. }
  910. }
  911.  
  912. if (IsEnemy() || IsStone())
  913. {
  914. __DetachTargetEffectMonster();
  915. }
  916. }
  917.  
  918.  
  919. void CInstanceBase::DestroySystem()
  920. {
  921. ms_kPool.Clear();
  922. }
  923.  
  924. void CInstanceBase::CreateSystem(UINT uCapacity)
  925. {
  926. ms_kPool.Create(uCapacity);
  927.  
  928. memset(ms_adwCRCAffectEffect, 0, sizeof(ms_adwCRCAffectEffect));
  929.  
  930. ms_fDustGap=250.0f;
  931. ms_fHorseDustGap=500.0f;
  932. }
  933.  
  934. CInstanceBase* CInstanceBase::New()
  935. {
  936. return ms_kPool.Alloc();
  937. }
  938.  
  939. void CInstanceBase::Delete(CInstanceBase* pkInst)
  940. {
  941. pkInst->Destroy();
  942. ms_kPool.Free(pkInst);
  943. }
  944.  
  945. void CInstanceBase::SetMainInstance()
  946. {
  947. CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
  948.  
  949. DWORD dwVID=GetVirtualID();
  950. rkChrMgr.SetMainInstance(dwVID);
  951.  
  952. m_GraphicThingInstance.SetMainInstance();
  953. }
  954.  
  955. CInstanceBase* CInstanceBase::__GetMainInstancePtr()
  956. {
  957. CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
  958.  
  959. return rkChrMgr.GetMainInstancePtr();
  960. }
  961.  
  962. void CInstanceBase::__ClearMainInstance()
  963. {
  964. CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
  965. rkChrMgr.ClearMainInstance();
  966. }
  967.  
  968. /* 실제 플레이어 캐릭터인지 조사.*/
  969. bool CInstanceBase::__IsMainInstance()
  970. {
  971. if (this==__GetMainInstancePtr())
  972. return true;
  973.  
  974. return false;
  975. }
  976.  
  977. bool CInstanceBase::__IsExistMainInstance()
  978. {
  979. if(__GetMainInstancePtr())
  980. return true;
  981. else
  982. return false;
  983. }
  984.  
  985. bool CInstanceBase::__MainCanSeeHiddenThing()
  986. {
  987. return false;
  988. // CInstanceBase * pInstance = __GetMainInstancePtr();
  989. // return pInstance->IsAffect(AFFECT_GAMJI);
  990. }
  991.  
  992. float CInstanceBase::__GetBowRange()
  993. {
  994. float fRange = 2500.0f - 100.0f;
  995.  
  996. if (__IsMainInstance())
  997. {
  998. IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
  999. fRange += float(rPlayer.GetStatus(POINT_BOW_DISTANCE));
  1000. }
  1001.  
  1002. return fRange;
  1003. }
  1004.  
  1005. CInstanceBase* CInstanceBase::__FindInstancePtr(DWORD dwVID)
  1006. {
  1007. CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
  1008.  
  1009. return rkChrMgr.GetInstancePtr(dwVID);
  1010. }
  1011.  
  1012. bool CInstanceBase::__FindRaceType(DWORD dwRace, BYTE* pbType)
  1013. {
  1014. CPythonNonPlayer& rkNonPlayer=CPythonNonPlayer::Instance();
  1015.  
  1016. return rkNonPlayer.GetInstanceType(dwRace, pbType);
  1017. }
  1018.  
  1019. bool CInstanceBase::Create(const SCreateData& c_rkCreateData)
  1020. {
  1021. IAbstractApplication::GetSingleton().SkipRenderBuffering(300);
  1022.  
  1023. SetInstanceType(c_rkCreateData.m_bType);
  1024.  
  1025.  
  1026. if (!SetRace(c_rkCreateData.m_dwRace))
  1027. return false;
  1028.  
  1029. #ifdef ENABLE_EXTENDED_ALIGNMENT_SYSTEM
  1030. if (IsPC())
  1031. SetJob(c_rkCreateData.m_bJob);
  1032. #endif
  1033.  
  1034. SetVirtualID(c_rkCreateData.m_dwVID);
  1035.  
  1036. if (c_rkCreateData.m_isMain)
  1037. SetMainInstance();
  1038.  
  1039. if (IsGuildWall())
  1040. {
  1041. unsigned center_x;
  1042. unsigned center_y;
  1043.  
  1044. c_rkCreateData.m_kAffectFlags.ConvertToPosition(&center_x, &center_y);
  1045.  
  1046. float center_z = __GetBackgroundHeight(center_x, center_y);
  1047. NEW_SetPixelPosition(TPixelPosition(float(c_rkCreateData.m_lPosX), float(c_rkCreateData.m_lPosY), center_z));
  1048. }
  1049.  
  1050. else
  1051. {
  1052. SCRIPT_SetPixelPosition(float(c_rkCreateData.m_lPosX), float(c_rkCreateData.m_lPosY));
  1053. }
  1054.  
  1055. if (0 != c_rkCreateData.m_dwMountVnum)
  1056. MountHorse(c_rkCreateData.m_dwMountVnum);
  1057.  
  1058. SetArmor(c_rkCreateData.m_dwArmor);
  1059.  
  1060. if (IsPC())
  1061. {
  1062. SetHair(c_rkCreateData.m_dwHair);
  1063. SetWeapon(c_rkCreateData.m_dwWeapon);
  1064.  
  1065. #ifdef ENABLE_EFFECT_SYSTEM
  1066. SetSpecialEffect(c_rkCreateData.m_dwBodyEffect, c_rkCreateData.m_dwWeaponEffectRight, c_rkCreateData.m_dwWeaponEffectLeft);
  1067. #endif
  1068.  
  1069. #ifdef ENABLE_CUSTOM_TITLE_SYSTEM
  1070. m_stTitle = c_rkCreateData.m_stTitle;
  1071. UpdateTitleName(c_rkCreateData.m_stTitle.c_str());
  1072. memcpy(m_bTitleColor, c_rkCreateData.m_bTitleColor, sizeof(m_bTitleColor));
  1073.  
  1074. m_stTitle2 = c_rkCreateData.m_stTitle2;
  1075. UpdateTitle2Name(c_rkCreateData.m_stTitle2.c_str());
  1076. memcpy(m_bTitle2Color, c_rkCreateData.m_bTitle2Color, sizeof(m_bTitle2Color));
  1077. #endif
  1078.  
  1079. }
  1080.  
  1081. __Create_SetName(c_rkCreateData);
  1082.  
  1083. m_dwLevel = c_rkCreateData.m_dwLevel;
  1084.  
  1085. #if defined(WJ_SHOW_MOB_INFO)
  1086. m_dwAIFlag = c_rkCreateData.m_dwAIFlag;
  1087. #endif
  1088.  
  1089. m_dwGuildID = c_rkCreateData.m_dwGuildID;
  1090. m_dwEmpireID = c_rkCreateData.m_dwEmpireID;
  1091.  
  1092. SetVirtualNumber(c_rkCreateData.m_dwRace);
  1093. SetRotation(c_rkCreateData.m_fRot);
  1094.  
  1095. #ifdef ENABLE_TITLE_SYSTEM
  1096. SetsTitle(c_rkCreateData.m_iTitleID);
  1097. #endif
  1098.  
  1099. SetAlignment(c_rkCreateData.m_sAlignment);
  1100. SetPKMode(c_rkCreateData.m_byPKMode);
  1101.  
  1102. SetMoveSpeed(c_rkCreateData.m_dwMovSpd);
  1103. SetAttackSpeed(c_rkCreateData.m_dwAtkSpd);
  1104.  
  1105. if (!IsWearingDress())
  1106. {
  1107. m_GraphicThingInstance.SetAlphaValue(0.0f);
  1108. m_GraphicThingInstance.BlendAlphaValue(1.0f, 0.5f);
  1109. }
  1110.  
  1111. if (!IsGuildWall())
  1112. {
  1113. SetAffectFlagContainer(c_rkCreateData.m_kAffectFlags);
  1114. }
  1115.  
  1116. AttachTextTail();
  1117. RefreshTextTail();
  1118.  
  1119. if (c_rkCreateData.m_dwStateFlags & ADD_CHARACTER_STATE_SPAWN)
  1120. {
  1121.  
  1122. #ifdef ENABLE_HIDE_EFFECTS
  1123. if (IsAffect(AFFECT_SPAWN) && !CPythonSystem::Instance().IsHideEffects(CPythonSystem::HIDE_EFFECTS_GENERAL))
  1124. __AttachEffect(EFFECT_SPAWN_APPEAR);
  1125. #else
  1126. if (IsAffect(AFFECT_SPAWN))
  1127. __AttachEffect(EFFECT_SPAWN_APPEAR);
  1128. #endif
  1129. if (IsPC())
  1130. {
  1131. Refresh(CRaceMotionData::NAME_WAIT, true);
  1132. }
  1133.  
  1134. else
  1135. {
  1136. Refresh(CRaceMotionData::NAME_SPAWN, false);
  1137. }
  1138. }
  1139.  
  1140. else
  1141. {
  1142. Refresh(CRaceMotionData::NAME_WAIT, true);
  1143. }
  1144.  
  1145. __AttachEmpireEffect(c_rkCreateData.m_dwEmpireID);
  1146.  
  1147. RegisterBoundingSphere();
  1148.  
  1149. #ifdef ENABLE_BOSS_EFFECT
  1150. if (IsBoss())
  1151. __AttachEffectBoss();
  1152. #endif
  1153.  
  1154. if (c_rkCreateData.m_dwStateFlags & ADD_CHARACTER_STATE_DEAD)
  1155. m_GraphicThingInstance.DieEnd();
  1156.  
  1157. SetStateFlags(c_rkCreateData.m_dwStateFlags);
  1158.  
  1159. #ifdef ENABLE_HIDE_EFFECTS
  1160. if (CPythonSystem::Instance().IsHideEffects(CPythonSystem::HIDE_EFFECTS_GENERAL))
  1161. m_GraphicThingInstance.SetBattleHitEffect(0);
  1162. else
  1163. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  1164. #else
  1165. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  1166. #endif;
  1167.  
  1168. if (!IsPC())
  1169. {
  1170. DWORD dwBodyColor = CPythonNonPlayer::Instance().GetMonsterColor(c_rkCreateData.m_dwRace);
  1171. if (0 != dwBodyColor)
  1172. {
  1173. SetModulateRenderMode();
  1174. SetAddColor(dwBodyColor);
  1175. }
  1176. }
  1177.  
  1178. __AttachHorseSaddle();
  1179.  
  1180. const int c_iGuildSymbolRace = 14200;
  1181.  
  1182. if (c_iGuildSymbolRace == GetRace())
  1183. {
  1184. std::string strFileName = GetGuildSymbolFileName(m_dwGuildID);
  1185. if (IsFile(strFileName.c_str()))
  1186. m_GraphicThingInstance.ChangeMaterial(strFileName.c_str());
  1187. }
  1188.  
  1189. #ifdef ENABLE_HIDE_EFFECTS
  1190. SetInstanceHideEffect(CPythonSystem::Instance().IsHideEffects(CPythonSystem::HIDE_EFFECTS_GENERAL));
  1191. #endif
  1192.  
  1193. return true;
  1194. }
  1195.  
  1196. #ifdef ENABLE_HIDE_EFFECTS
  1197. void CInstanceBase::SetInstanceHideEffect(bool bFlag)
  1198. {
  1199. if(bFlag)
  1200. m_GraphicThingInstance.HideAllAttachingEffect();
  1201. else
  1202. m_GraphicThingInstance.ShowAllAttachingEffect();
  1203. }
  1204. #endif
  1205.  
  1206. void CInstanceBase::__Create_SetName(const SCreateData& c_rkCreateData)
  1207. {
  1208. if (IsGoto())
  1209. {
  1210. SetNameString("", 0);
  1211. return;
  1212. }
  1213.  
  1214. if (IsWarp())
  1215. {
  1216. __Create_SetWarpName(c_rkCreateData);
  1217. return;
  1218. }
  1219.  
  1220. SetNameString(c_rkCreateData.m_stName.c_str(), c_rkCreateData.m_stName.length());
  1221. }
  1222.  
  1223. void CInstanceBase::__Create_SetWarpName(const SCreateData& c_rkCreateData)
  1224. {
  1225. const char * c_szName;
  1226. if (CPythonNonPlayer::Instance().GetName(c_rkCreateData.m_dwRace, &c_szName))
  1227. {
  1228. std::string strName = c_szName;
  1229. int iFindingPos = strName.find_first_of(" ", 0);
  1230.  
  1231. if (iFindingPos > 0)
  1232. {
  1233. strName.resize(iFindingPos);
  1234. }
  1235.  
  1236. SetNameString(strName.c_str(), strName.length());
  1237. }
  1238.  
  1239. else
  1240. {
  1241. SetNameString(c_rkCreateData.m_stName.c_str(), c_rkCreateData.m_stName.length());
  1242. }
  1243. }
  1244.  
  1245. void CInstanceBase::SetNameString(const char* c_szName, int len)
  1246. {
  1247. m_stName.assign(c_szName, len);
  1248. }
  1249.  
  1250.  
  1251. bool CInstanceBase::SetRace(DWORD eRace)
  1252. {
  1253. m_dwRace = eRace;
  1254.  
  1255. if (!m_GraphicThingInstance.SetRace(eRace))
  1256. return false;
  1257.  
  1258. if (!__FindRaceType(m_dwRace, &m_eRaceType))
  1259. m_eRaceType=CActorInstance::TYPE_PC;
  1260.  
  1261. return true;
  1262. }
  1263.  
  1264. BOOL CInstanceBase::__IsChangableWeapon(int iWeaponID)
  1265. {
  1266. if (IsWearingDress())
  1267. {
  1268. const int c_iBouquets[] =
  1269. {
  1270. 50201,
  1271. 50202,
  1272. 50203,
  1273. 50204,
  1274. 0,
  1275. };
  1276.  
  1277. for (int i = 0; c_iBouquets[i] != 0; ++i)
  1278. if (iWeaponID == c_iBouquets[i])
  1279. return true;
  1280.  
  1281. return false;
  1282. }
  1283.  
  1284. else
  1285. return true;
  1286. }
  1287.  
  1288. BOOL CInstanceBase::IsWearingDress()
  1289. {
  1290. const int c_iWeddingDressShape = 201;
  1291.  
  1292. return c_iWeddingDressShape == m_eShape;
  1293. }
  1294.  
  1295. BOOL CInstanceBase::IsHoldingPickAxe()
  1296. {
  1297. const int c_iPickAxeStart = 29101;
  1298. const int c_iPickAxeEnd = 29110;
  1299.  
  1300. return m_awPart[CRaceData::PART_WEAPON] >= c_iPickAxeStart && m_awPart[CRaceData::PART_WEAPON] <= c_iPickAxeEnd;
  1301. }
  1302.  
  1303. BOOL CInstanceBase::IsNewMount()
  1304. {
  1305. return m_kHorse.IsNewMount();
  1306. }
  1307.  
  1308. BOOL CInstanceBase::IsMountingHorse()
  1309. {
  1310. return m_kHorse.IsMounting();
  1311. }
  1312.  
  1313. void CInstanceBase::MountHorse(UINT eRace)
  1314. {
  1315. m_kHorse.Destroy();
  1316. m_kHorse.Create(m_GraphicThingInstance.NEW_GetCurPixelPositionRef(), eRace, ms_adwCRCAffectEffect[EFFECT_HIT]);
  1317.  
  1318. SetMotionMode(CRaceMotionData::MODE_HORSE);
  1319. SetRotationSpeed(c_fDefaultHorseRotationSpeed);
  1320.  
  1321. m_GraphicThingInstance.MountHorse(m_kHorse.GetActorPtr());
  1322. m_GraphicThingInstance.Stop();
  1323. m_GraphicThingInstance.RefreshActorInstance();
  1324. }
  1325.  
  1326. void CInstanceBase::DismountHorse()
  1327. {
  1328. m_kHorse.Destroy();
  1329. }
  1330.  
  1331. void CInstanceBase::GetInfo(std::string* pstInfo)
  1332. {
  1333. char szInfo[256];
  1334.  
  1335. sprintf(szInfo, "Inst - UC %d, RC %d Pool - %d ",
  1336. ms_dwUpdateCounter,
  1337. ms_dwRenderCounter,
  1338. ms_kPool.GetCapacity()
  1339. );
  1340.  
  1341. pstInfo->append(szInfo);
  1342. }
  1343.  
  1344. void CInstanceBase::ResetPerformanceCounter()
  1345. {
  1346. ms_dwUpdateCounter=0;
  1347. ms_dwRenderCounter=0;
  1348. ms_dwDeformCounter=0;
  1349. }
  1350.  
  1351. bool CInstanceBase::NEW_IsLastPixelPosition()
  1352. {
  1353. return m_GraphicThingInstance.IsPushing();
  1354. }
  1355.  
  1356. const TPixelPosition& CInstanceBase::NEW_GetLastPixelPositionRef()
  1357. {
  1358. return m_GraphicThingInstance.NEW_GetLastPixelPositionRef();
  1359. }
  1360.  
  1361. void CInstanceBase::NEW_SetDstPixelPositionZ(FLOAT z)
  1362. {
  1363. m_GraphicThingInstance.NEW_SetDstPixelPositionZ(z);
  1364. }
  1365.  
  1366. void CInstanceBase::NEW_SetDstPixelPosition(const TPixelPosition& c_rkPPosDst)
  1367. {
  1368. m_GraphicThingInstance.NEW_SetDstPixelPosition(c_rkPPosDst);
  1369. }
  1370.  
  1371. void CInstanceBase::NEW_SetSrcPixelPosition(const TPixelPosition& c_rkPPosSrc)
  1372. {
  1373. m_GraphicThingInstance.NEW_SetSrcPixelPosition(c_rkPPosSrc);
  1374. }
  1375.  
  1376. const TPixelPosition& CInstanceBase::NEW_GetCurPixelPositionRef()
  1377. {
  1378. return m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
  1379. }
  1380.  
  1381. const TPixelPosition& CInstanceBase::NEW_GetDstPixelPositionRef()
  1382. {
  1383. return m_GraphicThingInstance.NEW_GetDstPixelPositionRef();
  1384. }
  1385.  
  1386. const TPixelPosition& CInstanceBase::NEW_GetSrcPixelPositionRef()
  1387. {
  1388. return m_GraphicThingInstance.NEW_GetSrcPixelPositionRef();
  1389. }
  1390.  
  1391. void CInstanceBase::OnSyncing()
  1392. {
  1393. m_GraphicThingInstance.__OnSyncing();
  1394. }
  1395.  
  1396. void CInstanceBase::OnWaiting()
  1397. {
  1398. m_GraphicThingInstance.__OnWaiting();
  1399. }
  1400.  
  1401. void CInstanceBase::OnMoving()
  1402. {
  1403. m_GraphicThingInstance.__OnMoving();
  1404. }
  1405.  
  1406. void CInstanceBase::ChangeGuild(DWORD dwGuildID)
  1407. {
  1408. m_dwGuildID=dwGuildID;
  1409.  
  1410. DetachTextTail();
  1411. AttachTextTail();
  1412. RefreshTextTail();
  1413. }
  1414.  
  1415. DWORD CInstanceBase::GetPart(CRaceData::EParts part)
  1416. {
  1417. assert(part >= 0 && part < CRaceData::PART_MAX_NUM);
  1418. return m_awPart[part];
  1419. }
  1420.  
  1421. DWORD CInstanceBase::GetShape()
  1422. {
  1423. return m_eShape;
  1424. }
  1425.  
  1426. bool CInstanceBase::CanAct()
  1427. {
  1428. return m_GraphicThingInstance.CanAct();
  1429. }
  1430.  
  1431. bool CInstanceBase::CanMove()
  1432. {
  1433. return m_GraphicThingInstance.CanMove();
  1434. }
  1435.  
  1436. bool CInstanceBase::CanUseSkill()
  1437. {
  1438. if (IsPoly())
  1439. return false;
  1440.  
  1441. if (IsWearingDress())
  1442. return false;
  1443.  
  1444. if (IsHoldingPickAxe())
  1445. return false;
  1446.  
  1447. if (!m_kHorse.CanUseSkill())
  1448. return false;
  1449.  
  1450. if (!m_GraphicThingInstance.CanUseSkill())
  1451. return false;
  1452.  
  1453. return true;
  1454. }
  1455.  
  1456. bool CInstanceBase::CanAttack()
  1457. {
  1458. if (!m_kHorse.CanAttack())
  1459. return false;
  1460.  
  1461. if (IsWearingDress())
  1462. return false;
  1463.  
  1464. if (IsHoldingPickAxe())
  1465. return false;
  1466.  
  1467. return m_GraphicThingInstance.CanAttack();
  1468. }
  1469.  
  1470. bool CInstanceBase::CanFishing()
  1471. {
  1472. return m_GraphicThingInstance.CanFishing();
  1473. }
  1474.  
  1475. BOOL CInstanceBase::IsBowMode()
  1476. {
  1477. return m_GraphicThingInstance.IsBowMode();
  1478. }
  1479.  
  1480. BOOL CInstanceBase::IsHandMode()
  1481. {
  1482. return m_GraphicThingInstance.IsHandMode();
  1483. }
  1484.  
  1485. BOOL CInstanceBase::IsFishingMode()
  1486. {
  1487. if (CRaceMotionData::MODE_FISHING == m_GraphicThingInstance.GetMotionMode())
  1488. return true;
  1489.  
  1490. return false;
  1491. }
  1492.  
  1493. BOOL CInstanceBase::IsFishing()
  1494. {
  1495. return m_GraphicThingInstance.IsFishing();
  1496. }
  1497.  
  1498. BOOL CInstanceBase::IsDead()
  1499. {
  1500. return m_GraphicThingInstance.IsDead();
  1501. }
  1502.  
  1503. BOOL CInstanceBase::IsStun()
  1504. {
  1505. return m_GraphicThingInstance.IsStun();
  1506. }
  1507.  
  1508. BOOL CInstanceBase::IsSleep()
  1509. {
  1510. return m_GraphicThingInstance.IsSleep();
  1511. }
  1512.  
  1513. BOOL CInstanceBase::__IsSyncing()
  1514. {
  1515. return m_GraphicThingInstance.__IsSyncing();
  1516. }
  1517.  
  1518. void CInstanceBase::NEW_SetOwner(DWORD dwVIDOwner)
  1519. {
  1520. m_GraphicThingInstance.SetOwner(dwVIDOwner);
  1521. }
  1522.  
  1523. float CInstanceBase::GetLocalTime()
  1524. {
  1525. return m_GraphicThingInstance.GetLocalTime();
  1526. }
  1527.  
  1528.  
  1529. void CInstanceBase::PushUDPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg)
  1530. {
  1531. }
  1532.  
  1533. void CInstanceBase::PushTCPStateExpanded(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg, UINT uTargetVID)
  1534. {
  1535. SCommand kCmdNew;
  1536. kCmdNew.m_kPPosDst = c_rkPPosDst;
  1537. kCmdNew.m_dwChkTime = dwCmdTime+100;
  1538. kCmdNew.m_dwCmdTime = dwCmdTime;
  1539. kCmdNew.m_fDstRot = fDstRot;
  1540. kCmdNew.m_eFunc = eFunc;
  1541. kCmdNew.m_uArg = uArg;
  1542. kCmdNew.m_uTargetVID = uTargetVID;
  1543. m_kQue_kCmdNew.push_back(kCmdNew);
  1544. }
  1545.  
  1546. DWORD ELTimer_GetServerFrameMSec();
  1547. void CInstanceBase::PushTCPState (DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg)
  1548. {
  1549. if (__IsMainInstance())
  1550. {
  1551. TraceError ("CInstanceBase::PushTCPState You can't send move packets to yourself!");
  1552. return;
  1553. }
  1554.  
  1555. int nNetworkGap = ELTimer_GetServerFrameMSec() - dwCmdTime;
  1556.  
  1557. m_nAverageNetworkGap = (m_nAverageNetworkGap * 70 + nNetworkGap * 30) / 100;
  1558.  
  1559. SCommand kCmdNew;
  1560. kCmdNew.m_kPPosDst = c_rkPPosDst;
  1561. kCmdNew.m_dwChkTime = dwCmdTime+m_nAverageNetworkGap;
  1562. kCmdNew.m_dwCmdTime = dwCmdTime;
  1563. kCmdNew.m_fDstRot = fDstRot;
  1564. kCmdNew.m_eFunc = eFunc;
  1565. kCmdNew.m_uArg = uArg;
  1566. m_kQue_kCmdNew.push_back(kCmdNew);
  1567. }
  1568.  
  1569. BOOL CInstanceBase::__CanProcessNetworkStatePacket()
  1570. {
  1571. if (m_GraphicThingInstance.IsDead())
  1572. return FALSE;
  1573.  
  1574. if (m_GraphicThingInstance.IsKnockDown())
  1575. return FALSE;
  1576.  
  1577. if (m_GraphicThingInstance.IsUsingSkill())
  1578. if (!m_GraphicThingInstance.CanCancelSkill())
  1579. return FALSE;
  1580.  
  1581. return TRUE;
  1582. }
  1583.  
  1584. BOOL CInstanceBase::__IsEnableTCPProcess(UINT eCurFunc)
  1585. {
  1586. if (m_GraphicThingInstance.IsActEmotion())
  1587. {
  1588. return FALSE;
  1589. }
  1590.  
  1591. if (!m_bEnableTCPState)
  1592. {
  1593. if (FUNC_EMOTION != eCurFunc)
  1594. {
  1595. return FALSE;
  1596. }
  1597. }
  1598.  
  1599. return TRUE;
  1600. }
  1601.  
  1602. void CInstanceBase::StateProcess()
  1603. {
  1604. while (1)
  1605. {
  1606. if (m_kQue_kCmdNew.empty())
  1607. return;
  1608.  
  1609. DWORD dwDstChkTime = m_kQue_kCmdNew.front().m_dwChkTime;
  1610. DWORD dwCurChkTime = ELTimer_GetServerFrameMSec();
  1611.  
  1612. if (dwCurChkTime < dwDstChkTime)
  1613. return;
  1614.  
  1615. SCommand kCmdTop = m_kQue_kCmdNew.front();
  1616. m_kQue_kCmdNew.pop_front();
  1617.  
  1618. TPixelPosition kPPosDst = kCmdTop.m_kPPosDst;
  1619. //DWORD dwCmdTime = kCmdTop.m_dwCmdTime;
  1620. FLOAT fRotDst = kCmdTop.m_fDstRot;
  1621. UINT eFunc = kCmdTop.m_eFunc;
  1622. UINT uArg = kCmdTop.m_uArg;
  1623. UINT uVID = GetVirtualID();
  1624. UINT uTargetVID = kCmdTop.m_uTargetVID;
  1625.  
  1626. TPixelPosition kPPosCur;
  1627. NEW_GetPixelPosition(&kPPosCur);
  1628.  
  1629. TPixelPosition kPPosDir = kPPosDst - kPPosCur;
  1630. float fDirLen = (float)sqrt(kPPosDir.x * kPPosDir.x + kPPosDir.y * kPPosDir.y);
  1631.  
  1632. if (!__CanProcessNetworkStatePacket())
  1633. {
  1634. Lognf(0, "vid=%d 움직일 수 없는 상태라 스킵 IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown());
  1635. return;
  1636. }
  1637.  
  1638. if (!__IsEnableTCPProcess(eFunc))
  1639. {
  1640. return;
  1641. }
  1642.  
  1643. switch (eFunc)
  1644. {
  1645. case FUNC_WAIT:
  1646. {
  1647. if (fDirLen > 1.0f)
  1648. {
  1649. //NEW_GetSrcPixelPositionRef() = kPPosCur;
  1650. //NEW_GetDstPixelPositionRef() = kPPosDst;
  1651. NEW_SetSrcPixelPosition(kPPosCur);
  1652. NEW_SetDstPixelPosition(kPPosDst);
  1653.  
  1654. __EnableSkipCollision();
  1655.  
  1656. m_fDstRot = fRotDst;
  1657. m_isGoing = TRUE;
  1658.  
  1659. m_kMovAfterFunc.eFunc = FUNC_WAIT;
  1660.  
  1661. if (!IsWalking())
  1662. StartWalking();
  1663. }
  1664.  
  1665. else
  1666. {
  1667.  
  1668. m_isGoing = FALSE;
  1669.  
  1670. if (!IsWaiting())
  1671. EndWalking();
  1672.  
  1673. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1674. SetAdvancingRotation(fRotDst);
  1675. SetRotation(fRotDst);
  1676. }
  1677. break;
  1678. }
  1679.  
  1680. case FUNC_MOVE:
  1681. {
  1682. //NEW_GetSrcPixelPositionRef() = kPPosCur;
  1683. //NEW_GetDstPixelPositionRef() = kPPosDst;
  1684. NEW_SetSrcPixelPosition(kPPosCur);
  1685. NEW_SetDstPixelPosition(kPPosDst);
  1686. m_fDstRot = fRotDst;
  1687. m_isGoing = TRUE;
  1688. __EnableSkipCollision();
  1689. //m_isSyncMov = TRUE;
  1690.  
  1691. m_kMovAfterFunc.eFunc = FUNC_MOVE;
  1692.  
  1693. if (!IsWalking())
  1694. {
  1695.  
  1696. StartWalking();
  1697. }
  1698.  
  1699. else
  1700. {
  1701.  
  1702. }
  1703.  
  1704. break;
  1705. }
  1706.  
  1707. case FUNC_COMBO:
  1708. {
  1709. if (fDirLen >= 50.0f)
  1710. {
  1711. NEW_SetSrcPixelPosition(kPPosCur);
  1712. NEW_SetDstPixelPosition(kPPosDst);
  1713.  
  1714. m_fDstRot=fRotDst;
  1715. m_isGoing = TRUE;
  1716.  
  1717. __EnableSkipCollision();
  1718.  
  1719. m_kMovAfterFunc.eFunc = FUNC_COMBO;
  1720. m_kMovAfterFunc.uArg = uArg;
  1721.  
  1722. if (!IsWalking())
  1723. StartWalking();
  1724. }
  1725.  
  1726. else
  1727. {
  1728.  
  1729. m_isGoing = FALSE;
  1730.  
  1731. if (IsWalking())
  1732. EndWalking();
  1733.  
  1734. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1735. RunComboAttack(fRotDst, uArg);
  1736. }
  1737. break;
  1738. }
  1739.  
  1740. case FUNC_ATTACK:
  1741. {
  1742. if (fDirLen>=50.0f)
  1743. {
  1744. //NEW_GetSrcPixelPositionRef() = kPPosCur;
  1745. //NEW_GetDstPixelPositionRef() = kPPosDst;
  1746.  
  1747. NEW_SetSrcPixelPosition(kPPosCur);
  1748. NEW_SetDstPixelPosition(kPPosDst);
  1749.  
  1750. m_fDstRot = fRotDst;
  1751. m_isGoing = TRUE;
  1752.  
  1753. __EnableSkipCollision();
  1754.  
  1755. //m_isSyncMov = TRUE;
  1756.  
  1757. m_kMovAfterFunc.eFunc = FUNC_ATTACK;
  1758.  
  1759. if (!IsWalking())
  1760. StartWalking();
  1761.  
  1762.  
  1763. }
  1764.  
  1765. else
  1766. {
  1767. m_isGoing = FALSE;
  1768.  
  1769. if (IsWalking())
  1770. EndWalking();
  1771.  
  1772. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1773. BlendRotation(fRotDst);
  1774.  
  1775. RunNormalAttack(fRotDst);
  1776. }
  1777. break;
  1778. }
  1779.  
  1780. case FUNC_MOB_SKILL:
  1781. {
  1782. if (fDirLen >= 50.0f)
  1783. {
  1784. NEW_SetSrcPixelPosition(kPPosCur);
  1785. NEW_SetDstPixelPosition(kPPosDst);
  1786.  
  1787. m_fDstRot = fRotDst;
  1788. m_isGoing = TRUE;
  1789.  
  1790. __EnableSkipCollision();
  1791.  
  1792. m_kMovAfterFunc.eFunc = FUNC_MOB_SKILL;
  1793. m_kMovAfterFunc.uArg = uArg;
  1794.  
  1795. if (!IsWalking())
  1796. StartWalking();
  1797. }
  1798.  
  1799. else
  1800. {
  1801. m_isGoing = FALSE;
  1802.  
  1803. if (IsWalking())
  1804. EndWalking();
  1805.  
  1806. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1807. BlendRotation(fRotDst);
  1808.  
  1809. m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_SPECIAL_1 + uArg);
  1810. }
  1811. break;
  1812. }
  1813.  
  1814. case FUNC_EMOTION:
  1815. {
  1816. if (fDirLen>100.0f)
  1817. {
  1818. NEW_SetSrcPixelPosition(kPPosCur);
  1819. NEW_SetDstPixelPosition(kPPosDst);
  1820.  
  1821. m_fDstRot = fRotDst;
  1822. m_isGoing = TRUE;
  1823.  
  1824. if (__IsMainInstance())
  1825. __EnableSkipCollision();
  1826.  
  1827. m_kMovAfterFunc.eFunc = FUNC_EMOTION;
  1828. m_kMovAfterFunc.uArg = uArg;
  1829. m_kMovAfterFunc.uArgExpanded = uTargetVID;
  1830. m_kMovAfterFunc.kPosDst = kPPosDst;
  1831.  
  1832. if (!IsWalking())
  1833. StartWalking();
  1834. }
  1835.  
  1836. else
  1837. {
  1838. __ProcessFunctionEmotion(uArg, uTargetVID, kPPosDst);
  1839. }
  1840. break;
  1841. }
  1842.  
  1843. default:
  1844. {
  1845. if (eFunc & FUNC_SKILL)
  1846. {
  1847. if (fDirLen >= 50.0f)
  1848. {
  1849. //NEW_GetSrcPixelPositionRef() = kPPosCur;
  1850. //NEW_GetDstPixelPositionRef() = kPPosDst;
  1851.  
  1852. NEW_SetSrcPixelPosition(kPPosCur);
  1853. NEW_SetDstPixelPosition(kPPosDst);
  1854.  
  1855. m_fDstRot = fRotDst;
  1856. m_isGoing = TRUE;
  1857. //m_isSyncMov = TRUE;
  1858.  
  1859. __EnableSkipCollision();
  1860.  
  1861. m_kMovAfterFunc.eFunc = eFunc;
  1862. m_kMovAfterFunc.uArg = uArg;
  1863.  
  1864. if (!IsWalking())
  1865. StartWalking();
  1866. }
  1867.  
  1868. else
  1869. {
  1870. m_isGoing = FALSE;
  1871.  
  1872. if (IsWalking())
  1873. EndWalking();
  1874.  
  1875. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1876. SetAdvancingRotation(fRotDst);
  1877. SetRotation(fRotDst);
  1878.  
  1879. NEW_UseSkill(0, eFunc & 0x7f, uArg&0x0f, (uArg>>4) ? true : false);
  1880. }
  1881. }
  1882. break;
  1883. }
  1884. }
  1885. }
  1886. }
  1887.  
  1888. void CInstanceBase::MovementProcess()
  1889. {
  1890. TPixelPosition kPPosCur;
  1891. NEW_GetPixelPosition(&kPPosCur);
  1892.  
  1893. TPixelPosition kPPosNext;
  1894. {
  1895. const D3DXVECTOR3 & c_rkV3Mov = m_GraphicThingInstance.GetMovementVectorRef();
  1896.  
  1897. kPPosNext.x = kPPosCur.x + (+c_rkV3Mov.x);
  1898. kPPosNext.y = kPPosCur.y + (-c_rkV3Mov.y);
  1899. kPPosNext.z = kPPosCur.z + (+c_rkV3Mov.z);
  1900. }
  1901.  
  1902. TPixelPosition kPPosDeltaSC = kPPosCur - NEW_GetSrcPixelPositionRef();
  1903. TPixelPosition kPPosDeltaSN = kPPosNext - NEW_GetSrcPixelPositionRef();
  1904. TPixelPosition kPPosDeltaSD = NEW_GetDstPixelPositionRef() - NEW_GetSrcPixelPositionRef();
  1905.  
  1906. float fCurLen = sqrtf(kPPosDeltaSC.x * kPPosDeltaSC.x + kPPosDeltaSC.y * kPPosDeltaSC.y);
  1907. float fNextLen = sqrtf(kPPosDeltaSN.x * kPPosDeltaSN.x + kPPosDeltaSN.y * kPPosDeltaSN.y);
  1908. float fTotalLen = sqrtf(kPPosDeltaSD.x * kPPosDeltaSD.x + kPPosDeltaSD.y * kPPosDeltaSD.y);
  1909. float fRestLen = fTotalLen - fCurLen;
  1910.  
  1911. if (__IsMainInstance())
  1912. {
  1913. if (m_isGoing && IsWalking())
  1914. {
  1915. float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(NEW_GetSrcPixelPositionRef(), NEW_GetDstPixelPositionRef());
  1916.  
  1917. SetAdvancingRotation(fDstRot);
  1918.  
  1919. if (fRestLen<=0.0)
  1920. {
  1921. if (IsWalking())
  1922. EndWalking();
  1923.  
  1924. m_isGoing = FALSE;
  1925.  
  1926. BlockMovement();
  1927.  
  1928. if (FUNC_EMOTION == m_kMovAfterFunc.eFunc)
  1929. {
  1930. DWORD dwMotionNumber = m_kMovAfterFunc.uArg;
  1931. DWORD dwTargetVID = m_kMovAfterFunc.uArgExpanded;
  1932.  
  1933. __ProcessFunctionEmotion(dwMotionNumber, dwTargetVID, m_kMovAfterFunc.kPosDst);
  1934. m_kMovAfterFunc.eFunc = FUNC_WAIT;
  1935.  
  1936. return;
  1937. }
  1938. }
  1939. }
  1940. }
  1941.  
  1942. else
  1943. {
  1944. if (m_isGoing && IsWalking())
  1945. {
  1946. float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(NEW_GetSrcPixelPositionRef(), NEW_GetDstPixelPositionRef());
  1947.  
  1948. SetAdvancingRotation(fDstRot);
  1949.  
  1950. if (fRestLen < -100.0f)
  1951. {
  1952. NEW_SetSrcPixelPosition(kPPosCur);
  1953.  
  1954. float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, NEW_GetDstPixelPositionRef());
  1955. SetAdvancingRotation(fDstRot);
  1956.  
  1957. if (FUNC_MOVE == m_kMovAfterFunc.eFunc)
  1958. {
  1959. m_kMovAfterFunc.eFunc = FUNC_WAIT;
  1960. }
  1961. }
  1962.  
  1963. else if (fCurLen <= fTotalLen && fTotalLen <= fNextLen)
  1964. {
  1965. if (m_GraphicThingInstance.IsDead() || m_GraphicThingInstance.IsKnockDown())
  1966. {
  1967. __DisableSkipCollision();
  1968.  
  1969. m_isGoing = FALSE;
  1970. }
  1971.  
  1972. else
  1973. {
  1974. switch (m_kMovAfterFunc.eFunc)
  1975. {
  1976. case FUNC_ATTACK:
  1977. {
  1978. if (IsWalking())
  1979. EndWalking();
  1980.  
  1981. __DisableSkipCollision();
  1982. m_isGoing = FALSE;
  1983.  
  1984. BlockMovement();
  1985. SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
  1986. SetAdvancingRotation(m_fDstRot);
  1987. SetRotation(m_fDstRot);
  1988.  
  1989. RunNormalAttack(m_fDstRot);
  1990. break;
  1991. }
  1992.  
  1993. case FUNC_COMBO:
  1994. {
  1995. if (IsWalking())
  1996. EndWalking();
  1997.  
  1998. __DisableSkipCollision();
  1999. m_isGoing = FALSE;
  2000.  
  2001. BlockMovement();
  2002. SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
  2003. RunComboAttack(m_fDstRot, m_kMovAfterFunc.uArg);
  2004. break;
  2005. }
  2006.  
  2007. case FUNC_EMOTION:
  2008. {
  2009. m_isGoing = FALSE;
  2010. m_kMovAfterFunc.eFunc = FUNC_WAIT;
  2011. __DisableSkipCollision();
  2012. BlockMovement();
  2013.  
  2014. DWORD dwMotionNumber = m_kMovAfterFunc.uArg;
  2015. DWORD dwTargetVID = m_kMovAfterFunc.uArgExpanded;
  2016. __ProcessFunctionEmotion(dwMotionNumber, dwTargetVID, m_kMovAfterFunc.kPosDst);
  2017. break;
  2018. }
  2019.  
  2020. case FUNC_MOVE:
  2021. {
  2022. break;
  2023. }
  2024.  
  2025. case FUNC_MOB_SKILL:
  2026. {
  2027. if (IsWalking())
  2028. EndWalking();
  2029.  
  2030. __DisableSkipCollision();
  2031. m_isGoing = FALSE;
  2032.  
  2033. BlockMovement();
  2034. SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
  2035. SetAdvancingRotation(m_fDstRot);
  2036. SetRotation(m_fDstRot);
  2037.  
  2038. m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_SPECIAL_1 + m_kMovAfterFunc.uArg);
  2039. break;
  2040. }
  2041.  
  2042. default:
  2043. {
  2044. if (m_kMovAfterFunc.eFunc & FUNC_SKILL)
  2045. {
  2046. SetAdvancingRotation(m_fDstRot);
  2047. BlendRotation(m_fDstRot);
  2048. NEW_UseSkill(0, m_kMovAfterFunc.eFunc & 0x7f, m_kMovAfterFunc.uArg&0x0f, (m_kMovAfterFunc.uArg>>4) ? true : false);
  2049. }
  2050.  
  2051. else
  2052. {
  2053. __DisableSkipCollision();
  2054. m_isGoing = FALSE;
  2055.  
  2056. BlockMovement();
  2057. SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
  2058. SetAdvancingRotation(m_fDstRot);
  2059. BlendRotation(m_fDstRot);
  2060. if (!IsWaiting())
  2061. {
  2062. EndWalking();
  2063. }
  2064. }
  2065. break;
  2066. }
  2067. }
  2068.  
  2069. }
  2070. }
  2071.  
  2072. }
  2073. }
  2074.  
  2075. if (IsWalking() || m_GraphicThingInstance.IsUsingMovingSkill())
  2076. {
  2077. float fRotation = m_GraphicThingInstance.GetRotation();
  2078. float fAdvancingRotation = m_GraphicThingInstance.GetAdvancingRotation();
  2079. int iDirection = GetRotatingDirection(fRotation, fAdvancingRotation);
  2080.  
  2081. if (DEGREE_DIRECTION_SAME != m_iRotatingDirection)
  2082. {
  2083. if (DEGREE_DIRECTION_LEFT == iDirection)
  2084. {
  2085. fRotation = fmodf(fRotation + m_fRotSpd*m_GraphicThingInstance.GetSecondElapsed(), 360.0f);
  2086. }
  2087.  
  2088. else if (DEGREE_DIRECTION_RIGHT == iDirection)
  2089. {
  2090. fRotation = fmodf(fRotation - m_fRotSpd*m_GraphicThingInstance.GetSecondElapsed() + 360.0f, 360.0f);
  2091. }
  2092.  
  2093. if (m_iRotatingDirection != GetRotatingDirection(fRotation, fAdvancingRotation))
  2094. {
  2095. m_iRotatingDirection = DEGREE_DIRECTION_SAME;
  2096. fRotation = fAdvancingRotation;
  2097. }
  2098.  
  2099. m_GraphicThingInstance.SetRotation(fRotation);
  2100. }
  2101.  
  2102. if (__IsInDustRange())
  2103. {
  2104. float fDustDistance = NEW_GetDistanceFromDestPixelPosition(m_kPPosDust);
  2105. if (IsMountingHorse())
  2106. {
  2107. if (fDustDistance > ms_fHorseDustGap)
  2108. {
  2109. NEW_GetPixelPosition(&m_kPPosDust);
  2110. __AttachEffect(EFFECT_HORSE_DUST);
  2111. }
  2112. }
  2113.  
  2114. else
  2115. {
  2116. if (fDustDistance > ms_fDustGap)
  2117. {
  2118. NEW_GetPixelPosition(&m_kPPosDust);
  2119. __AttachEffect(EFFECT_DUST);
  2120. }
  2121. }
  2122. }
  2123. }
  2124. }
  2125.  
  2126. void CInstanceBase::__ProcessFunctionEmotion(DWORD dwMotionNumber, DWORD dwTargetVID, const TPixelPosition & c_rkPosDst)
  2127. {
  2128. if (IsWalking())
  2129. EndWalkingWithoutBlending();
  2130.  
  2131. __EnableChangingTCPState();
  2132. SCRIPT_SetPixelPosition(c_rkPosDst.x, c_rkPosDst.y);
  2133.  
  2134. CInstanceBase * pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwTargetVID);
  2135. if (pTargetInstance)
  2136. {
  2137. pTargetInstance->__EnableChangingTCPState();
  2138.  
  2139. if (pTargetInstance->IsWalking())
  2140. pTargetInstance->EndWalkingWithoutBlending();
  2141.  
  2142. WORD wMotionNumber1 = HIWORD(dwMotionNumber);
  2143. WORD wMotionNumber2 = LOWORD(dwMotionNumber);
  2144.  
  2145. int src_job = RaceToJob(GetRace());
  2146. int dst_job = RaceToJob(pTargetInstance->GetRace());
  2147.  
  2148. NEW_LookAtDestInstance(*pTargetInstance);
  2149. m_GraphicThingInstance.InterceptOnceMotion(wMotionNumber1 + dst_job);
  2150. m_GraphicThingInstance.SetRotation(m_GraphicThingInstance.GetTargetRotation());
  2151. m_GraphicThingInstance.SetAdvancingRotation(m_GraphicThingInstance.GetTargetRotation());
  2152.  
  2153. pTargetInstance->NEW_LookAtDestInstance(*this);
  2154. pTargetInstance->m_GraphicThingInstance.InterceptOnceMotion(wMotionNumber2 + src_job);
  2155. pTargetInstance->m_GraphicThingInstance.SetRotation(pTargetInstance->m_GraphicThingInstance.GetTargetRotation());
  2156. pTargetInstance->m_GraphicThingInstance.SetAdvancingRotation(pTargetInstance->m_GraphicThingInstance.GetTargetRotation());
  2157.  
  2158. if (pTargetInstance->__IsMainInstance())
  2159. {
  2160. IAbstractPlayer & rPlayer=IAbstractPlayer::GetSingleton();
  2161. rPlayer.EndEmotionProcess();
  2162. }
  2163. }
  2164.  
  2165. if (__IsMainInstance())
  2166. {
  2167. IAbstractPlayer & rPlayer=IAbstractPlayer::GetSingleton();
  2168. rPlayer.EndEmotionProcess();
  2169. }
  2170. }
  2171.  
  2172. int g_iAccumulationTime = 0;
  2173.  
  2174. void CInstanceBase::Update()
  2175. {
  2176. ++ms_dwUpdateCounter;
  2177.  
  2178. StateProcess();
  2179.  
  2180. m_GraphicThingInstance.PhysicsProcess();
  2181. m_GraphicThingInstance.RotationProcess();
  2182. m_GraphicThingInstance.ComboProcess();
  2183. m_GraphicThingInstance.AccumulationMovement();
  2184.  
  2185. if (m_GraphicThingInstance.IsMovement())
  2186. {
  2187. TPixelPosition kPPosCur;
  2188. NEW_GetPixelPosition(&kPPosCur);
  2189.  
  2190. DWORD dwCurTime = ELTimer_GetFrameMSec();
  2191.  
  2192. m_dwNextUpdateHeightTime = dwCurTime;
  2193. kPPosCur.z = __GetBackgroundHeight (kPPosCur.x, kPPosCur.y);
  2194. NEW_SetPixelPosition (kPPosCur);
  2195.  
  2196. {
  2197. DWORD dwMtrlColor=__GetShadowMapColor(kPPosCur.x, kPPosCur.y);
  2198. m_GraphicThingInstance.SetMaterialColor(dwMtrlColor);
  2199. }
  2200. }
  2201.  
  2202. m_GraphicThingInstance.UpdateAdvancingPointInstance();
  2203.  
  2204. #ifdef ENABLE_HIDE_PET
  2205. if (IsPet())
  2206. {
  2207. if (CPythonSystem::Instance().IsHidePets())
  2208. {
  2209. if (!IsAffect(AFFECT_INVISIBILITY))
  2210. {
  2211. __SetAffect(AFFECT_INVISIBILITY, true);
  2212. m_kAffectFlagContainer.Set(AFFECT_INVISIBILITY, true);
  2213. }
  2214. }
  2215.  
  2216. else
  2217. {
  2218. if (IsAffect(AFFECT_INVISIBILITY))
  2219. {
  2220. __SetAffect(AFFECT_INVISIBILITY, false);
  2221. m_kAffectFlagContainer.Set(AFFECT_INVISIBILITY, false);
  2222. }
  2223. }
  2224. }
  2225. #endif
  2226.  
  2227. #ifdef ENABLE_HIDE_MOUNT
  2228. if (IsMount())
  2229. {
  2230. if (CPythonSystem::Instance().IsHideMounts())
  2231. {
  2232. if (!IsAffect(AFFECT_INVISIBILITY))
  2233. {
  2234. __SetAffect(AFFECT_INVISIBILITY, true);
  2235. m_kAffectFlagContainer.Set(AFFECT_INVISIBILITY, true);
  2236. }
  2237. }
  2238.  
  2239. else
  2240. {
  2241. if (IsAffect(AFFECT_INVISIBILITY))
  2242. {
  2243. __SetAffect(AFFECT_INVISIBILITY, false);
  2244. m_kAffectFlagContainer.Set(AFFECT_INVISIBILITY, false);
  2245. }
  2246. }
  2247. }
  2248. #endif
  2249.  
  2250. #ifdef ENABLE_HIDE_SHOPS
  2251. if (IsShops())
  2252. {
  2253. if (CPythonSystem::Instance().IsHideShops())
  2254. {
  2255. if (!IsAffect(AFFECT_INVISIBILITY))
  2256. {
  2257. __SetAffect(AFFECT_INVISIBILITY, true);
  2258. m_kAffectFlagContainer.Set(AFFECT_INVISIBILITY, true);
  2259. }
  2260. }
  2261.  
  2262. else
  2263. {
  2264. if (IsAffect(AFFECT_INVISIBILITY))
  2265. {
  2266. __SetAffect(AFFECT_INVISIBILITY, false);
  2267. m_kAffectFlagContainer.Set(AFFECT_INVISIBILITY, false);
  2268. }
  2269. }
  2270. }
  2271. #endif
  2272.  
  2273. AttackProcess();
  2274. MovementProcess();
  2275.  
  2276. m_GraphicThingInstance.MotionProcess(IsPC());
  2277. if (IsMountingHorse())
  2278. {
  2279. m_kHorse.m_pkActor->HORSE_MotionProcess(FALSE);
  2280. }
  2281.  
  2282. __ComboProcess();
  2283.  
  2284. ProcessDamage();
  2285.  
  2286. }
  2287.  
  2288. void CInstanceBase::Transform()
  2289. {
  2290. if (__IsSyncing())
  2291. {
  2292.  
  2293. }
  2294.  
  2295. else
  2296. {
  2297. if (IsWalking() || m_GraphicThingInstance.IsUsingMovingSkill())
  2298. {
  2299. const D3DXVECTOR3& c_rv3Movment=m_GraphicThingInstance.GetMovementVectorRef();
  2300.  
  2301. float len=(c_rv3Movment.x*c_rv3Movment.x)+(c_rv3Movment.y*c_rv3Movment.y);
  2302. if (len>1.0f)
  2303. OnMoving();
  2304. else
  2305. OnWaiting();
  2306. }
  2307. }
  2308.  
  2309. m_GraphicThingInstance.INSTANCEBASE_Transform();
  2310. }
  2311.  
  2312.  
  2313. void CInstanceBase::Deform()
  2314. {
  2315. if (!__CanRender())
  2316. return;
  2317.  
  2318. ++ms_dwDeformCounter;
  2319.  
  2320. m_GraphicThingInstance.INSTANCEBASE_Deform();
  2321.  
  2322. m_kHorse.Deform();
  2323. }
  2324.  
  2325. void CInstanceBase::RenderTrace()
  2326. {
  2327. if (!__CanRender())
  2328. return;
  2329.  
  2330. m_GraphicThingInstance.RenderTrace();
  2331. }
  2332.  
  2333. void CInstanceBase::Render()
  2334. {
  2335. if (!__CanRender())
  2336. return;
  2337.  
  2338. ++ms_dwRenderCounter;
  2339.  
  2340. m_kHorse.Render();
  2341. m_GraphicThingInstance.Render();
  2342.  
  2343. if (CActorInstance::IsDirLine())
  2344. {
  2345. if (NEW_GetDstPixelPositionRef().x != 0.0f)
  2346. {
  2347. static CScreen s_kScreen;
  2348.  
  2349. STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
  2350. STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
  2351. STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
  2352. STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, FALSE);
  2353. STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
  2354. STATEMANAGER.SetRenderState(D3DRS_LIGHTING, FALSE);
  2355.  
  2356. TPixelPosition px;
  2357. m_GraphicThingInstance.GetPixelPosition(&px);
  2358.  
  2359. D3DXVECTOR3 kD3DVt3Cur(px.x, px.y, px.z);
  2360. D3DXVECTOR3 kD3DVt3Dest(NEW_GetDstPixelPositionRef().x, -NEW_GetDstPixelPositionRef().y, NEW_GetDstPixelPositionRef().z);
  2361.  
  2362. //printf("%s %f\n", GetNameString(), kD3DVt3Cur.y - kD3DVt3Dest.y);
  2363. //float fdx = NEW_GetDstPixelPositionRef().x - NEW_GetSrcPixelPositionRef().x;
  2364. //float fdy = NEW_GetDstPixelPositionRef().y - NEW_GetSrcPixelPositionRef().y;
  2365.  
  2366. s_kScreen.SetDiffuseColor(0.0f, 0.0f, 1.0f);
  2367. s_kScreen.RenderLine3d(kD3DVt3Cur.x, kD3DVt3Cur.y, px.z, kD3DVt3Dest.x, kD3DVt3Dest.y, px.z);
  2368. STATEMANAGER.RestoreRenderState(D3DRS_ZENABLE);
  2369. STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, TRUE);
  2370. STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE);
  2371. }
  2372. }
  2373. }
  2374.  
  2375. void CInstanceBase::RenderToShadowMap()
  2376. {
  2377. if (IsDoor())
  2378. return;
  2379.  
  2380. if (IsBuilding())
  2381. return;
  2382.  
  2383. if (!__CanRender())
  2384. return;
  2385.  
  2386. if (!__IsExistMainInstance())
  2387. return;
  2388.  
  2389. CInstanceBase* pkInstMain=__GetMainInstancePtr();
  2390.  
  2391. const float SHADOW_APPLY_DISTANCE = 2500.0f;
  2392.  
  2393. float fDistance=NEW_GetDistanceFromDestInstance(*pkInstMain);
  2394. if (fDistance>=SHADOW_APPLY_DISTANCE)
  2395. return;
  2396.  
  2397. m_GraphicThingInstance.RenderToShadowMap();
  2398. }
  2399.  
  2400. void CInstanceBase::RenderCollision()
  2401. {
  2402. m_GraphicThingInstance.RenderCollisionData();
  2403. }
  2404.  
  2405. void CInstanceBase::SetVirtualID(DWORD dwVirtualID)
  2406. {
  2407. m_GraphicThingInstance.SetVirtualID(dwVirtualID);
  2408. }
  2409.  
  2410. void CInstanceBase::SetVirtualNumber(DWORD dwVirtualNumber)
  2411. {
  2412. m_dwVirtualNumber = dwVirtualNumber;
  2413. }
  2414.  
  2415. void CInstanceBase::SetInstanceType(int iInstanceType)
  2416. {
  2417. m_GraphicThingInstance.SetActorType(iInstanceType);
  2418. }
  2419.  
  2420. #ifdef ENABLE_TITLE_SYSTEM
  2421. void CInstanceBase::SetsTitle(int iTitle)
  2422. {
  2423. m_iTitleID = iTitle;
  2424. RefreshTextTailTitle();
  2425. }
  2426. #endif
  2427.  
  2428. void CInstanceBase::SetAlignment(short sAlignment)
  2429. {
  2430. m_sAlignment = sAlignment;
  2431. RefreshTextTailTitle();
  2432. }
  2433.  
  2434. void CInstanceBase::SetPKMode(BYTE byPKMode)
  2435. {
  2436. if (m_byPKMode == byPKMode)
  2437. return;
  2438.  
  2439. m_byPKMode = byPKMode;
  2440.  
  2441. if (__IsMainInstance())
  2442. {
  2443. IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
  2444. rPlayer.NotifyChangePKMode();
  2445. }
  2446. }
  2447.  
  2448. void CInstanceBase::SetKiller(bool bFlag)
  2449. {
  2450. if (m_isKiller == bFlag)
  2451. return;
  2452.  
  2453. m_isKiller = bFlag;
  2454. RefreshTextTail();
  2455. }
  2456.  
  2457. void CInstanceBase::SetPartyMemberFlag(bool bFlag)
  2458. {
  2459. m_isPartyMember = bFlag;
  2460. }
  2461.  
  2462. void CInstanceBase::SetStateFlags(DWORD dwStateFlags)
  2463. {
  2464. if (dwStateFlags & ADD_CHARACTER_STATE_KILLER)
  2465. SetKiller(TRUE);
  2466. else
  2467. SetKiller(FALSE);
  2468.  
  2469. if (dwStateFlags & ADD_CHARACTER_STATE_PARTY)
  2470. SetPartyMemberFlag(TRUE);
  2471. else
  2472. SetPartyMemberFlag(FALSE);
  2473. }
  2474.  
  2475. void CInstanceBase::SetComboType(UINT uComboType)
  2476. {
  2477. m_GraphicThingInstance.SetComboType(uComboType);
  2478. }
  2479.  
  2480. const char * CInstanceBase::GetNameString()
  2481. {
  2482. return m_stName.c_str();
  2483. }
  2484.  
  2485. DWORD CInstanceBase::GetRace()
  2486. {
  2487. return m_dwRace;
  2488. }
  2489.  
  2490. bool CInstanceBase::IsConflictAlignmentInstance(CInstanceBase& rkInstVictim)
  2491. {
  2492. if (PK_MODE_PROTECT == rkInstVictim.GetPKMode())
  2493. return false;
  2494.  
  2495. switch (GetAlignmentType())
  2496. {
  2497. case ALIGNMENT_TYPE_NORMAL:
  2498. case ALIGNMENT_TYPE_WHITE:
  2499. if (ALIGNMENT_TYPE_DARK == rkInstVictim.GetAlignmentType())
  2500. return true;
  2501. break;
  2502.  
  2503. case ALIGNMENT_TYPE_DARK:
  2504. if (GetAlignmentType() != rkInstVictim.GetAlignmentType())
  2505. return true;
  2506. break;
  2507. }
  2508.  
  2509. return false;
  2510. }
  2511.  
  2512. void CInstanceBase::SetDuelMode(DWORD type)
  2513. {
  2514. m_dwDuelMode = type;
  2515. }
  2516.  
  2517. DWORD CInstanceBase::GetDuelMode()
  2518. {
  2519. return m_dwDuelMode;
  2520. }
  2521.  
  2522. bool CInstanceBase::IsAttackableInstance(CInstanceBase& rkInstVictim)
  2523. {
  2524. if (__IsMainInstance())
  2525. {
  2526. CPythonPlayer& rkPlayer=CPythonPlayer::Instance();
  2527. if(rkPlayer.IsObserverMode())
  2528. return false;
  2529. }
  2530.  
  2531. if (GetVirtualID() == rkInstVictim.GetVirtualID())
  2532. return false;
  2533.  
  2534. if (IsStone())
  2535. {
  2536. if (rkInstVictim.IsPC())
  2537. return true;
  2538. }
  2539.  
  2540. else if (IsPC())
  2541. {
  2542. if (rkInstVictim.IsStone())
  2543. return true;
  2544.  
  2545. if (rkInstVictim.IsPC())
  2546. {
  2547. if (GetDuelMode())
  2548. {
  2549. switch(GetDuelMode())
  2550. {
  2551. case DUEL_CANNOTATTACK:
  2552. return false;
  2553.  
  2554. case DUEL_START:
  2555. if(__FindDUELKey(GetVirtualID(),rkInstVictim.GetVirtualID()))
  2556. return true;
  2557. else
  2558. return false;
  2559. }
  2560. }
  2561.  
  2562. if (PK_MODE_GUILD == GetPKMode())
  2563. if (GetGuildID() == rkInstVictim.GetGuildID())
  2564. return false;
  2565.  
  2566. if (rkInstVictim.IsKiller())
  2567. if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2568. return true;
  2569.  
  2570. if (PK_MODE_PROTECT != GetPKMode())
  2571. {
  2572. if (PK_MODE_FREE == GetPKMode())
  2573. {
  2574. if (PK_MODE_PROTECT != rkInstVictim.GetPKMode())
  2575. if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2576. return true;
  2577. }
  2578.  
  2579. if (PK_MODE_GUILD == GetPKMode())
  2580. {
  2581. if (PK_MODE_PROTECT != rkInstVictim.GetPKMode())
  2582. if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2583. if (GetGuildID() != rkInstVictim.GetGuildID())
  2584. return true;
  2585. }
  2586. }
  2587.  
  2588. if (IsSameEmpire(rkInstVictim))
  2589. {
  2590. if (IsPVPInstance(rkInstVictim))
  2591. return true;
  2592.  
  2593. if (PK_MODE_REVENGE == GetPKMode())
  2594. if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2595. if (IsConflictAlignmentInstance(rkInstVictim))
  2596. return true;
  2597. }
  2598.  
  2599. else
  2600. {
  2601. return true;
  2602. }
  2603. }
  2604.  
  2605. if (rkInstVictim.IsEnemy())
  2606. return true;
  2607.  
  2608. if (rkInstVictim.IsWoodenDoor())
  2609. return true;
  2610. }
  2611.  
  2612. else if (IsEnemy())
  2613. {
  2614. if (rkInstVictim.IsPC())
  2615. return true;
  2616.  
  2617. if (rkInstVictim.IsBuilding())
  2618. return true;
  2619.  
  2620. }
  2621.  
  2622. else if (IsPoly())
  2623. {
  2624. if (rkInstVictim.IsPC())
  2625. return true;
  2626.  
  2627. if (rkInstVictim.IsEnemy())
  2628. return true;
  2629. }
  2630. return false;
  2631. }
  2632.  
  2633. bool CInstanceBase::IsTargetableInstance(CInstanceBase& rkInstVictim)
  2634. {
  2635. return rkInstVictim.CanPickInstance();
  2636. }
  2637.  
  2638. bool CInstanceBase::CanChangeTarget()
  2639. {
  2640. return m_GraphicThingInstance.CanChangeTarget();
  2641. }
  2642.  
  2643. bool CInstanceBase::CanPickInstance()
  2644. {
  2645. if (!__IsInViewFrustum())
  2646. return false;
  2647.  
  2648. if (IsDoor())
  2649. {
  2650. if (IsDead())
  2651. return false;
  2652. }
  2653.  
  2654. if (IsPC())
  2655. {
  2656. if (IsAffect(AFFECT_EUNHYEONG))
  2657. {
  2658. if (!__MainCanSeeHiddenThing())
  2659. return false;
  2660. }
  2661.  
  2662. if (IsAffect(AFFECT_REVIVE_INVISIBILITY))
  2663. return false;
  2664.  
  2665. if (IsAffect(AFFECT_INVISIBILITY))
  2666. return false;
  2667. }
  2668.  
  2669. if (IsDead())
  2670. return false;
  2671.  
  2672. return true;
  2673. }
  2674.  
  2675. bool CInstanceBase::CanViewTargetHP(CInstanceBase& rkInstVictim)
  2676. {
  2677. if (rkInstVictim.IsStone())
  2678. return true;
  2679.  
  2680. if (rkInstVictim.IsWoodenDoor())
  2681. return true;
  2682.  
  2683. if (rkInstVictim.IsEnemy())
  2684. return true;
  2685.  
  2686. #ifdef ENABLE_TARGET_HP_SYSTEM
  2687. if (rkInstVictim.IsPC())
  2688. return true;
  2689. #endif
  2690.  
  2691. return false;
  2692. }
  2693.  
  2694. BOOL CInstanceBase::IsPoly()
  2695. {
  2696. return m_GraphicThingInstance.IsPoly();
  2697. }
  2698.  
  2699. BOOL CInstanceBase::IsPC()
  2700. {
  2701. return m_GraphicThingInstance.IsPC();
  2702. }
  2703.  
  2704. BOOL CInstanceBase::IsNPC()
  2705. {
  2706. return m_GraphicThingInstance.IsNPC();
  2707. }
  2708.  
  2709. BOOL CInstanceBase::IsEnemy()
  2710. {
  2711. return m_GraphicThingInstance.IsEnemy();
  2712. }
  2713.  
  2714. BOOL CInstanceBase::IsStone()
  2715. {
  2716. return m_GraphicThingInstance.IsStone();
  2717. }
  2718.  
  2719. BOOL CInstanceBase::IsGuildWall()
  2720. {
  2721. return IsWall(m_dwRace);
  2722. }
  2723.  
  2724. BOOL CInstanceBase::IsResource()
  2725. {
  2726. switch (m_dwVirtualNumber)
  2727. {
  2728. case 20047:
  2729. case 20048:
  2730. case 20049:
  2731. case 20050:
  2732. case 20051:
  2733. case 20052:
  2734. case 20053:
  2735. case 20054:
  2736. case 20055:
  2737. case 20056:
  2738. case 20057:
  2739. case 20058:
  2740. case 20059:
  2741. case 30301:
  2742. case 30302:
  2743. case 30303:
  2744. case 30304:
  2745. case 30305:
  2746. return TRUE;
  2747. }
  2748.  
  2749. return FALSE;
  2750. }
  2751.  
  2752. BOOL CInstanceBase::IsWarp()
  2753. {
  2754. return m_GraphicThingInstance.IsWarp();
  2755. }
  2756.  
  2757. BOOL CInstanceBase::IsGoto()
  2758. {
  2759. return m_GraphicThingInstance.IsGoto();
  2760. }
  2761.  
  2762. BOOL CInstanceBase::IsObject()
  2763. {
  2764. return m_GraphicThingInstance.IsObject();
  2765. }
  2766.  
  2767. BOOL CInstanceBase::IsBuilding()
  2768. {
  2769. return m_GraphicThingInstance.IsBuilding();
  2770. }
  2771.  
  2772. BOOL CInstanceBase::IsDoor()
  2773. {
  2774. return m_GraphicThingInstance.IsDoor();
  2775. }
  2776.  
  2777. BOOL CInstanceBase::IsWoodenDoor()
  2778. {
  2779. if (m_GraphicThingInstance.IsDoor())
  2780. {
  2781. int vnum = GetVirtualNumber();
  2782. if (vnum == 13000)
  2783. return true;
  2784.  
  2785. else if (vnum >= 30111 && vnum <= 30119)
  2786. return true;
  2787.  
  2788. else
  2789. return false;
  2790. }
  2791.  
  2792. else
  2793. {
  2794. return false;
  2795. }
  2796. }
  2797.  
  2798. BOOL CInstanceBase::IsStoneDoor()
  2799. {
  2800. return m_GraphicThingInstance.IsDoor() && 13001 == GetVirtualNumber();
  2801. }
  2802.  
  2803. BOOL CInstanceBase::IsFlag()
  2804. {
  2805. if (GetRace() == 20035)
  2806. return TRUE;
  2807.  
  2808. if (GetRace() == 20036)
  2809. return TRUE;
  2810.  
  2811. if (GetRace() == 20037)
  2812. return TRUE;
  2813.  
  2814. return FALSE;
  2815. }
  2816.  
  2817. #ifdef ENABLE_BOSS_EFFECT
  2818. BOOL CInstanceBase::IsBoss()
  2819. {
  2820. if (m_dwRace == 2493 )
  2821. return TRUE;
  2822.  
  2823. return FALSE;
  2824. }
  2825. #endif
  2826.  
  2827. BOOL CInstanceBase::IsForceVisible()
  2828. {
  2829. if (IsAffect(AFFECT_SHOW_ALWAYS))
  2830. return TRUE;
  2831.  
  2832. if (IsObject() || IsBuilding() || IsDoor() )
  2833. return TRUE;
  2834.  
  2835. return FALSE;
  2836. }
  2837.  
  2838. int CInstanceBase::GetInstanceType()
  2839. {
  2840. return m_GraphicThingInstance.GetActorType();
  2841. }
  2842.  
  2843. DWORD CInstanceBase::GetVirtualID()
  2844. {
  2845. return m_GraphicThingInstance.GetVirtualID();
  2846. }
  2847.  
  2848. DWORD CInstanceBase::GetVirtualNumber()
  2849. {
  2850. return m_dwVirtualNumber;
  2851. }
  2852.  
  2853. bool CInstanceBase::__IsInViewFrustum()
  2854. {
  2855. return m_GraphicThingInstance.isShow();
  2856. }
  2857.  
  2858. bool CInstanceBase::__CanRender()
  2859. {
  2860. if (!__IsInViewFrustum())
  2861. return false;
  2862.  
  2863. if (IsAffect(AFFECT_INVISIBILITY))
  2864. return false;
  2865.  
  2866. return true;
  2867. }
  2868.  
  2869. bool CInstanceBase::IntersectBoundingBox()
  2870. {
  2871. float u, v, t;
  2872. return m_GraphicThingInstance.Intersect(&u, &v, &t);
  2873. }
  2874.  
  2875. bool CInstanceBase::IntersectDefendingSphere()
  2876. {
  2877. return m_GraphicThingInstance.IntersectDefendingSphere();
  2878. }
  2879.  
  2880. float CInstanceBase::GetDistance(CInstanceBase * pkTargetInst)
  2881. {
  2882. TPixelPosition TargetPixelPosition;
  2883. pkTargetInst->m_GraphicThingInstance.GetPixelPosition(&TargetPixelPosition);
  2884.  
  2885. return GetDistance(TargetPixelPosition);
  2886. }
  2887.  
  2888. float CInstanceBase::GetDistance(const TPixelPosition & c_rPixelPosition)
  2889. {
  2890. TPixelPosition PixelPosition;
  2891. m_GraphicThingInstance.GetPixelPosition(&PixelPosition);
  2892.  
  2893. float fdx = PixelPosition.x - c_rPixelPosition.x;
  2894. float fdy = PixelPosition.y - c_rPixelPosition.y;
  2895.  
  2896. return sqrtf((fdx*fdx) + (fdy*fdy));
  2897. }
  2898.  
  2899. CActorInstance& CInstanceBase::GetGraphicThingInstanceRef()
  2900. {
  2901. return m_GraphicThingInstance;
  2902. }
  2903.  
  2904. CActorInstance* CInstanceBase::GetGraphicThingInstancePtr()
  2905. {
  2906. return &m_GraphicThingInstance;
  2907. }
  2908.  
  2909. void CInstanceBase::RefreshActorInstance()
  2910. {
  2911. m_GraphicThingInstance.RefreshActorInstance();
  2912. }
  2913.  
  2914. void CInstanceBase::Refresh(DWORD dwMotIndex, bool isLoop)
  2915. {
  2916. RefreshState(dwMotIndex, isLoop);
  2917. }
  2918.  
  2919. void CInstanceBase::RestoreRenderMode()
  2920. {
  2921. m_GraphicThingInstance.RestoreRenderMode();
  2922. }
  2923.  
  2924. void CInstanceBase::SetAddRenderMode()
  2925. {
  2926. m_GraphicThingInstance.SetAddRenderMode();
  2927. }
  2928.  
  2929. void CInstanceBase::SetModulateRenderMode()
  2930. {
  2931. m_GraphicThingInstance.SetModulateRenderMode();
  2932. }
  2933.  
  2934. void CInstanceBase::SetRenderMode(int iRenderMode)
  2935. {
  2936. m_GraphicThingInstance.SetRenderMode(iRenderMode);
  2937. }
  2938.  
  2939. void CInstanceBase::SetAddColor(const D3DXCOLOR & c_rColor)
  2940. {
  2941. m_GraphicThingInstance.SetAddColor(c_rColor);
  2942. }
  2943.  
  2944. void CInstanceBase::__SetBlendRenderingMode()
  2945. {
  2946. m_GraphicThingInstance.SetBlendRenderMode();
  2947. }
  2948.  
  2949. void CInstanceBase::__SetAlphaValue(float fAlpha)
  2950. {
  2951. m_GraphicThingInstance.SetAlphaValue(fAlpha);
  2952. }
  2953.  
  2954. float CInstanceBase::__GetAlphaValue()
  2955. {
  2956. return m_GraphicThingInstance.GetAlphaValue();
  2957. }
  2958.  
  2959. void CInstanceBase::SetHair(DWORD eHair)
  2960. {
  2961. if (!HAIR_COLOR_ENABLE)
  2962. return;
  2963.  
  2964. if (IsPC()==false)
  2965. return;
  2966.  
  2967. m_awPart[CRaceData::PART_HAIR] = eHair;
  2968. m_GraphicThingInstance.SetHair(eHair);
  2969. }
  2970.  
  2971. #ifdef ENABLE_EFFECT_SYSTEM
  2972. void CInstanceBase::SetSpecialEffect(DWORD dwArmorEffect, DWORD dwWeaponEffectRight, DWORD dwWeaponEffectLeft)
  2973. {
  2974. #ifdef ENABLE_HIDE_EFFECTS
  2975. if (CPythonSystem::Instance().IsHideEffects(CPythonSystem::HIDE_EFFECTS_GENERAL))
  2976. return;
  2977. #endif
  2978.  
  2979. if (!IsPC())
  2980. return;
  2981.  
  2982. m_awPart[CRaceData::BODY_EFFECT] = dwArmorEffect;
  2983. SpecialEffectCheck();
  2984.  
  2985. m_awPart[CRaceData::WEAPON_RIGHT_EFFECT] = dwWeaponEffectRight;
  2986. m_awPart[CRaceData::WEAPON_LEFT_EFFECT] = dwWeaponEffectLeft;
  2987. SpecialEffectCheck(true);
  2988. }
  2989.  
  2990. void CInstanceBase::ClearSpecialEffect(bool isWeapon)
  2991. {
  2992. #ifdef ENABLE_HIDE_EFFECTS
  2993. if (CPythonSystem::Instance().IsHideEffects(CPythonSystem::HIDE_EFFECTS_GENERAL))
  2994. return;
  2995. #endif
  2996.  
  2997. if (!IsPC())
  2998. return;
  2999.  
  3000. if (isWeapon)
  3001. {
  3002. if (m_costumeWeaponEffectRight)
  3003. {
  3004. __EffectContainer_DetachEffect(m_costumeWeaponEffectRight);
  3005. m_costumeWeaponEffectRight = 0;
  3006. }
  3007.  
  3008. if (m_costumeWeaponEffectLeft)
  3009. {
  3010. __EffectContainer_DetachEffect(m_costumeWeaponEffectLeft);
  3011. m_costumeWeaponEffectLeft = 0;
  3012. }
  3013. }
  3014.  
  3015. else
  3016. {
  3017. if (m_costumeBodyEffect)
  3018. {
  3019. __EffectContainer_DetachEffect(m_costumeBodyEffect);
  3020. m_costumeBodyEffect = 0;
  3021. }
  3022. }
  3023. }
  3024.  
  3025. void CInstanceBase::SpecialEffectCheck(bool isWeapon)
  3026. {
  3027. #ifdef ENABLE_HIDE_EFFECTS
  3028. if (CPythonSystem::Instance().IsHideEffects(CPythonSystem::HIDE_EFFECTS_GENERAL))
  3029. return;
  3030. #endif
  3031.  
  3032. if (!IsPC())
  3033. return;
  3034.  
  3035. if (isWeapon)
  3036. {
  3037. ClearSpecialEffect(true);
  3038. m_costumeWeaponEffectRight = m_awPart[CRaceData::WEAPON_RIGHT_EFFECT];
  3039. m_costumeWeaponEffectLeft = m_awPart[CRaceData::WEAPON_LEFT_EFFECT];
  3040.  
  3041. if (m_costumeWeaponEffectRight)
  3042. __EffectContainer_AttachEffect(m_costumeWeaponEffectRight);
  3043.  
  3044. if (m_costumeWeaponEffectLeft)
  3045. __EffectContainer_AttachEffect(m_costumeWeaponEffectLeft);
  3046. }
  3047.  
  3048. else
  3049. {
  3050. ClearSpecialEffect();
  3051. m_costumeBodyEffect = m_awPart[CRaceData::BODY_EFFECT];
  3052. if (m_costumeBodyEffect)
  3053. __EffectContainer_AttachEffect(m_costumeBodyEffect);
  3054. }
  3055. }
  3056. #endif
  3057.  
  3058. void CInstanceBase::ChangeHair(DWORD eHair)
  3059. {
  3060. if (!HAIR_COLOR_ENABLE)
  3061. return;
  3062.  
  3063. if (IsPC()==false)
  3064. return;
  3065.  
  3066. if (GetPart(CRaceData::PART_HAIR)==eHair)
  3067. return;
  3068.  
  3069. SetHair(eHair);
  3070.  
  3071. //int type = m_GraphicThingInstance.GetMotionMode();
  3072.  
  3073. RefreshState(CRaceMotionData::NAME_WAIT, true);
  3074. //RefreshState(type, true);
  3075. }
  3076.  
  3077. void CInstanceBase::SetArmor(DWORD dwArmor)
  3078. {
  3079. DWORD dwShape;
  3080. if (__ArmorVnumToShape(dwArmor, &dwShape))
  3081. {
  3082. CItemData * pItemData;
  3083. if (CItemManager::Instance().GetItemDataPointer(dwArmor, &pItemData))
  3084. {
  3085. float fSpecularPower=pItemData->GetSpecularPowerf();
  3086.  
  3087. SetShape(dwShape, fSpecularPower);
  3088. __GetRefinedEffect(pItemData);
  3089.  
  3090. return;
  3091. }
  3092.  
  3093. else
  3094. __ClearArmorRefineEffect();
  3095. }
  3096.  
  3097. SetShape(dwArmor);
  3098. }
  3099.  
  3100. void CInstanceBase::SetShape(DWORD eShape, float fSpecular)
  3101. {
  3102. if (IsPoly())
  3103. {
  3104. m_GraphicThingInstance.SetShape(0);
  3105. }
  3106.  
  3107. else
  3108. {
  3109. m_GraphicThingInstance.SetShape(eShape, fSpecular);
  3110. }
  3111.  
  3112. m_eShape = eShape;
  3113. }
  3114.  
  3115.  
  3116.  
  3117. DWORD CInstanceBase::GetWeaponType()
  3118. {
  3119. DWORD dwWeapon = GetPart(CRaceData::PART_WEAPON);
  3120. CItemData * pItemData;
  3121.  
  3122. if (!CItemManager::Instance().GetItemDataPointer(dwWeapon, &pItemData))
  3123. return CItemData::WEAPON_NONE;
  3124.  
  3125. #ifdef ENABLE_COSTUME_WEAPON_SYSTEM
  3126. if (pItemData->GetType() == CItemData::ITEM_TYPE_COSTUME)
  3127. return pItemData->GetValue(3);
  3128. #endif
  3129.  
  3130. return pItemData->GetWeaponType();
  3131. }
  3132.  
  3133. /*
  3134. void CInstanceBase::SetParts(const WORD * c_pParts)
  3135. {
  3136. if (IsPoly())
  3137. return;
  3138.  
  3139. if (__IsShapeAnimalWear())
  3140. return;
  3141.  
  3142. UINT eWeapon=c_pParts[CRaceData::PART_WEAPON];
  3143.  
  3144. if (__IsChangableWeapon(eWeapon) == false)
  3145. eWeapon = 0;
  3146.  
  3147. if (eWeapon != m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))
  3148. {
  3149. m_GraphicThingInstance.AttachPart(CRaceData::PART_MAIN, CRaceData::PART_WEAPON, eWeapon);
  3150. m_awPart[CRaceData::PART_WEAPON] = eWeapon;
  3151. }
  3152.  
  3153. __AttachHorseSaddle();
  3154. }
  3155. */
  3156.  
  3157. void CInstanceBase::__ClearWeaponRefineEffect()
  3158. {
  3159. if (m_swordRefineEffectRight)
  3160. {
  3161. __DetachEffect(m_swordRefineEffectRight);
  3162. m_swordRefineEffectRight = 0;
  3163. }
  3164.  
  3165. if (m_swordRefineEffectLeft)
  3166. {
  3167. __DetachEffect(m_swordRefineEffectLeft);
  3168. m_swordRefineEffectLeft = 0;
  3169. }
  3170. }
  3171.  
  3172. void CInstanceBase::__ClearArmorRefineEffect()
  3173. {
  3174. if (m_armorRefineEffect)
  3175. {
  3176. __DetachEffect(m_armorRefineEffect);
  3177. m_armorRefineEffect = 0;
  3178. }
  3179. }
  3180.  
  3181. UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
  3182. {
  3183. DWORD refine = max(pItem->GetRefine() + pItem->GetSocketCount(),CItemData::ITEM_SOCKET_MAX_NUM) - CItemData::ITEM_SOCKET_MAX_NUM;
  3184. switch (pItem->GetType())
  3185. {
  3186. case CItemData::ITEM_TYPE_WEAPON:
  3187. __ClearWeaponRefineEffect();
  3188.  
  3189. if (refine < 7)
  3190. return 0;
  3191.  
  3192. switch(pItem->GetSubType())
  3193. {
  3194. case CItemData::WEAPON_DAGGER:
  3195. m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7+refine-7;
  3196. m_swordRefineEffectLeft = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7_LEFT+refine-7;
  3197. break;
  3198.  
  3199. case CItemData::WEAPON_FAN:
  3200. m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_FANBELL_REFINED7+refine-7;
  3201. break;
  3202.  
  3203. case CItemData::WEAPON_ARROW:
  3204. case CItemData::WEAPON_BELL:
  3205. m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7+refine-7;
  3206. break;
  3207.  
  3208. case CItemData::WEAPON_BOW:
  3209. m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_BOW_REFINED7+refine-7;
  3210. break;
  3211.  
  3212. default:
  3213. m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SWORD_REFINED7+refine-7;
  3214. }
  3215.  
  3216. if (m_swordRefineEffectRight)
  3217. m_swordRefineEffectRight = __AttachEffect(m_swordRefineEffectRight);
  3218.  
  3219. if (m_swordRefineEffectLeft)
  3220. m_swordRefineEffectLeft = __AttachEffect(m_swordRefineEffectLeft);
  3221. break;
  3222.  
  3223. case CItemData::ITEM_TYPE_ARMOR:
  3224. __ClearArmorRefineEffect();
  3225.  
  3226. if (pItem->GetSubType() == CItemData::ARMOR_BODY)
  3227. {
  3228. DWORD vnum = pItem->GetIndex();
  3229.  
  3230. if (12010 <= vnum && vnum <= 12049)
  3231. {
  3232. __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
  3233. __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2);
  3234. }
  3235. }
  3236.  
  3237. if (refine < 7)
  3238. return 0;
  3239.  
  3240. if (pItem->GetSubType() == CItemData::ARMOR_BODY)
  3241. {
  3242. m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7;
  3243. __AttachEffect(m_armorRefineEffect);
  3244. }
  3245. break;
  3246. }
  3247. return 0;
  3248. }
  3249.  
  3250. bool CInstanceBase::SetWeapon(DWORD eWeapon)
  3251. {
  3252. if (IsPoly())
  3253. return false;
  3254.  
  3255. if (__IsShapeAnimalWear())
  3256. return false;
  3257.  
  3258. if (__IsChangableWeapon(eWeapon) == false)
  3259. eWeapon = 0;
  3260.  
  3261. m_GraphicThingInstance.AttachWeapon(eWeapon);
  3262. m_awPart[CRaceData::PART_WEAPON] = eWeapon;
  3263.  
  3264. CItemData * pItemData;
  3265. if (CItemManager::Instance().GetItemDataPointer(eWeapon, &pItemData))
  3266. {
  3267.  
  3268. #ifdef ENABLE_COSTUME_WEAPON_SYSTEM
  3269. if (pItemData->GetType() == CItemData::ITEM_TYPE_COSTUME)
  3270. __ClearWeaponRefineEffect();
  3271. #endif
  3272.  
  3273. __GetRefinedEffect(pItemData);
  3274. }
  3275.  
  3276. else
  3277. __ClearWeaponRefineEffect();
  3278.  
  3279. return true;
  3280. }
  3281.  
  3282. void CInstanceBase::ChangeWeapon(DWORD eWeapon)
  3283. {
  3284. if (eWeapon == m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))
  3285. return;
  3286.  
  3287. if (SetWeapon(eWeapon))
  3288. RefreshState(CRaceMotionData::NAME_WAIT, true);
  3289. }
  3290.  
  3291. bool CInstanceBase::ChangeArmor(DWORD dwArmor)
  3292. {
  3293. DWORD eShape;
  3294. __ArmorVnumToShape(dwArmor, &eShape);
  3295.  
  3296. if (GetShape()==eShape)
  3297. return false;
  3298.  
  3299. CAffectFlagContainer kAffectFlagContainer;
  3300. kAffectFlagContainer.CopyInstance(m_kAffectFlagContainer);
  3301.  
  3302. DWORD dwVID = GetVirtualID();
  3303. DWORD dwRace = GetRace();
  3304. DWORD eHair = GetPart(CRaceData::PART_HAIR);
  3305. DWORD eWeapon = GetPart(CRaceData::PART_WEAPON);
  3306.  
  3307. float fRot = GetRotation();
  3308. float fAdvRot = GetAdvancingRotation();
  3309.  
  3310. if (IsWalking())
  3311. EndWalking();
  3312.  
  3313. __ClearAffects();
  3314.  
  3315. if (!SetRace(dwRace))
  3316. {
  3317. TraceError("CPythonCharacterManager::ChangeArmor - SetRace VID[%d] Race[%d] ERROR", dwVID, dwRace);
  3318. return false;
  3319. }
  3320.  
  3321. SetArmor(dwArmor);
  3322. SetHair(eHair);
  3323. SetWeapon(eWeapon);
  3324.  
  3325. SetRotation(fRot);
  3326. SetAdvancingRotation(fAdvRot);
  3327.  
  3328. __AttachHorseSaddle();
  3329.  
  3330. RefreshState(CRaceMotionData::NAME_WAIT, TRUE);
  3331.  
  3332. SetAffectFlagContainer(kAffectFlagContainer);
  3333.  
  3334. CActorInstance::IEventHandler& rkEventHandler=GetEventHandlerRef();
  3335. rkEventHandler.OnChangeShape();
  3336.  
  3337. return true;
  3338. }
  3339.  
  3340. bool CInstanceBase::__IsShapeAnimalWear()
  3341. {
  3342. if (100 == GetShape() ||
  3343. 101 == GetShape() ||
  3344. 102 == GetShape() ||
  3345. 103 == GetShape())
  3346.  
  3347. return true;
  3348.  
  3349. return false;
  3350. }
  3351.  
  3352. DWORD CInstanceBase::__GetRaceType()
  3353. {
  3354. return m_eRaceType;
  3355. }
  3356.  
  3357. void CInstanceBase::RefreshState(DWORD dwMotIndex, bool isLoop)
  3358. {
  3359. DWORD dwPartItemID = m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON);
  3360.  
  3361. BYTE byItemType = 0xff;
  3362. BYTE bySubType = 0xff;
  3363.  
  3364. CItemManager & rkItemMgr = CItemManager::Instance();
  3365. CItemData * pItemData;
  3366.  
  3367. if (rkItemMgr.GetItemDataPointer(dwPartItemID, &pItemData))
  3368. {
  3369. byItemType = pItemData->GetType();
  3370. bySubType = pItemData->GetWeaponType();
  3371. }
  3372.  
  3373. if (IsPoly())
  3374. {
  3375. SetMotionMode(CRaceMotionData::MODE_GENERAL);
  3376. }
  3377.  
  3378. else if (IsWearingDress())
  3379. {
  3380. SetMotionMode(CRaceMotionData::MODE_WEDDING_DRESS);
  3381. }
  3382.  
  3383. else if (IsHoldingPickAxe())
  3384. {
  3385. if (m_kHorse.IsMounting())
  3386. {
  3387. SetMotionMode(CRaceMotionData::MODE_HORSE);
  3388. }
  3389.  
  3390. else
  3391. {
  3392. SetMotionMode(CRaceMotionData::MODE_GENERAL);
  3393. }
  3394. }
  3395.  
  3396. else if (CItemData::ITEM_TYPE_ROD == byItemType)
  3397. {
  3398. if (m_kHorse.IsMounting())
  3399. {
  3400. SetMotionMode(CRaceMotionData::MODE_HORSE);
  3401. }
  3402.  
  3403. else
  3404. {
  3405. SetMotionMode(CRaceMotionData::MODE_FISHING);
  3406. }
  3407. }
  3408.  
  3409. #ifdef ENABLE_COSTUME_WEAPON_SYSTEM
  3410. else if (byItemType == CItemData::ITEM_TYPE_COSTUME)
  3411. {
  3412. switch (pItemData->GetValue(3))
  3413. {
  3414. case CItemData::WEAPON_SWORD:
  3415. if (m_kHorse.IsMounting())
  3416. SetMotionMode(CRaceMotionData::MODE_HORSE_ONEHAND_SWORD);
  3417. else
  3418. SetMotionMode(CRaceMotionData::MODE_ONEHAND_SWORD);
  3419. break;
  3420.  
  3421. case CItemData::WEAPON_DAGGER:
  3422. if (m_kHorse.IsMounting())
  3423. SetMotionMode(CRaceMotionData::MODE_HORSE_DUALHAND_SWORD);
  3424. else
  3425. SetMotionMode(CRaceMotionData::MODE_DUALHAND_SWORD);
  3426. break;
  3427.  
  3428. case CItemData::WEAPON_BOW:
  3429. if (m_kHorse.IsMounting())
  3430. SetMotionMode(CRaceMotionData::MODE_HORSE_BOW);
  3431. else
  3432. SetMotionMode(CRaceMotionData::MODE_BOW);
  3433. break;
  3434.  
  3435. case CItemData::WEAPON_TWO_HANDED:
  3436. if (m_kHorse.IsMounting())
  3437. SetMotionMode(CRaceMotionData::MODE_HORSE_TWOHAND_SWORD);
  3438. else
  3439. SetMotionMode(CRaceMotionData::MODE_TWOHAND_SWORD);
  3440. break;
  3441.  
  3442. case CItemData::WEAPON_BELL:
  3443. if (m_kHorse.IsMounting())
  3444. SetMotionMode(CRaceMotionData::MODE_HORSE_BELL);
  3445. else
  3446. SetMotionMode(CRaceMotionData::MODE_BELL);
  3447. break;
  3448.  
  3449. case CItemData::WEAPON_FAN:
  3450. if (m_kHorse.IsMounting())
  3451. SetMotionMode(CRaceMotionData::MODE_HORSE_FAN);
  3452. else
  3453. SetMotionMode(CRaceMotionData::MODE_FAN);
  3454. break;
  3455.  
  3456. default:
  3457. if (m_kHorse.IsMounting())
  3458. SetMotionMode(CRaceMotionData::MODE_HORSE);
  3459. else
  3460. SetMotionMode(CRaceMotionData::MODE_GENERAL);
  3461. break;
  3462. }
  3463. }
  3464. #endif
  3465.  
  3466. else if (m_kHorse.IsMounting())
  3467. {
  3468. switch (bySubType)
  3469. {
  3470. case CItemData::WEAPON_SWORD:
  3471. SetMotionMode(CRaceMotionData::MODE_HORSE_ONEHAND_SWORD);
  3472. break;
  3473.  
  3474. case CItemData::WEAPON_TWO_HANDED:
  3475. SetMotionMode(CRaceMotionData::MODE_HORSE_TWOHAND_SWORD);
  3476. break;
  3477.  
  3478. case CItemData::WEAPON_DAGGER:
  3479. SetMotionMode(CRaceMotionData::MODE_HORSE_DUALHAND_SWORD);
  3480. break;
  3481.  
  3482. case CItemData::WEAPON_FAN:
  3483. SetMotionMode(CRaceMotionData::MODE_HORSE_FAN);
  3484. break;
  3485.  
  3486. case CItemData::WEAPON_BELL:
  3487. SetMotionMode(CRaceMotionData::MODE_HORSE_BELL);
  3488. break;
  3489.  
  3490. case CItemData::WEAPON_BOW:
  3491. SetMotionMode(CRaceMotionData::MODE_HORSE_BOW);
  3492. break;
  3493.  
  3494. default:
  3495. SetMotionMode(CRaceMotionData::MODE_HORSE);
  3496. break;
  3497. }
  3498. }
  3499.  
  3500. else
  3501. {
  3502. switch (bySubType)
  3503. {
  3504. case CItemData::WEAPON_SWORD:
  3505. SetMotionMode(CRaceMotionData::MODE_ONEHAND_SWORD);
  3506. break;
  3507.  
  3508. case CItemData::WEAPON_TWO_HANDED:
  3509. SetMotionMode(CRaceMotionData::MODE_TWOHAND_SWORD);
  3510. break;
  3511.  
  3512. case CItemData::WEAPON_DAGGER:
  3513. SetMotionMode(CRaceMotionData::MODE_DUALHAND_SWORD);
  3514. break;
  3515.  
  3516. case CItemData::WEAPON_BOW:
  3517. SetMotionMode(CRaceMotionData::MODE_BOW);
  3518. break;
  3519.  
  3520. case CItemData::WEAPON_FAN:
  3521. SetMotionMode(CRaceMotionData::MODE_FAN);
  3522. break;
  3523.  
  3524. case CItemData::WEAPON_BELL:
  3525. SetMotionMode(CRaceMotionData::MODE_BELL);
  3526. break;
  3527.  
  3528. case CItemData::WEAPON_ARROW:
  3529. default:
  3530. SetMotionMode(CRaceMotionData::MODE_GENERAL);
  3531. break;
  3532. }
  3533. }
  3534.  
  3535. if (isLoop)
  3536. m_GraphicThingInstance.InterceptLoopMotion(dwMotIndex);
  3537. else
  3538. m_GraphicThingInstance.InterceptOnceMotion(dwMotIndex);
  3539.  
  3540. RefreshActorInstance();
  3541. }
  3542.  
  3543. void CInstanceBase::RegisterBoundingSphere()
  3544. {
  3545. if (!IsStone())
  3546. {
  3547. m_GraphicThingInstance.DeformNoSkin();
  3548. }
  3549.  
  3550. m_GraphicThingInstance.RegisterBoundingSphere();
  3551. }
  3552.  
  3553. bool CInstanceBase::CreateDeviceObjects()
  3554. {
  3555. return m_GraphicThingInstance.CreateDeviceObjects();
  3556. }
  3557.  
  3558. void CInstanceBase::DestroyDeviceObjects()
  3559. {
  3560. m_GraphicThingInstance.DestroyDeviceObjects();
  3561. }
  3562.  
  3563. void CInstanceBase::Destroy()
  3564. {
  3565. DetachTextTail();
  3566.  
  3567. DismountHorse();
  3568.  
  3569. m_kQue_kCmdNew.clear();
  3570.  
  3571. __EffectContainer_Destroy();
  3572. __StoneSmoke_Destroy();
  3573.  
  3574. if (__IsMainInstance())
  3575. __ClearMainInstance();
  3576.  
  3577. m_GraphicThingInstance.Destroy();
  3578.  
  3579. __Initialize();
  3580. }
  3581.  
  3582. void CInstanceBase::__InitializeRotationSpeed()
  3583. {
  3584. SetRotationSpeed(c_fDefaultRotationSpeed);
  3585. }
  3586.  
  3587. void CInstanceBase::__Warrior_Initialize()
  3588. {
  3589. m_kWarrior.m_dwGeomgyeongEffect=0;
  3590. }
  3591.  
  3592. void CInstanceBase::__Initialize()
  3593. {
  3594. __Warrior_Initialize();
  3595. __StoneSmoke_Inialize();
  3596. __EffectContainer_Initialize();
  3597. __InitializeRotationSpeed();
  3598.  
  3599. SetEventHandler(CActorInstance::IEventHandler::GetEmptyPtr());
  3600.  
  3601. m_kAffectFlagContainer.Clear();
  3602.  
  3603. m_dwLevel = 0;
  3604.  
  3605. #if defined(WJ_SHOW_MOB_INFO)
  3606. m_dwAIFlag = 0;
  3607. #endif
  3608.  
  3609. m_dwGuildID = 0;
  3610. m_dwEmpireID = 0;
  3611.  
  3612. m_eType = 0;
  3613. m_eRaceType = 0;
  3614. m_eShape = 0;
  3615. m_dwRace = 0;
  3616.  
  3617. #ifdef ENABLE_EXTENDED_ALIGNMENT_SYSTEM
  3618. m_bJob = 0;
  3619. #endif
  3620.  
  3621. m_dwVirtualNumber = 0;
  3622.  
  3623. m_dwBaseCmdTime=0;
  3624. m_dwBaseChkTime=0;
  3625. m_dwSkipTime=0;
  3626.  
  3627. m_GraphicThingInstance.Initialize();
  3628.  
  3629. m_dwAdvActorVID=0;
  3630. m_dwLastDmgActorVID=0;
  3631.  
  3632. m_nAverageNetworkGap=0;
  3633. m_dwNextUpdateHeightTime=0;
  3634.  
  3635. m_iRotatingDirection = DEGREE_DIRECTION_SAME;
  3636.  
  3637. m_isTextTail = FALSE;
  3638. m_isGoing = FALSE;
  3639.  
  3640. NEW_SetSrcPixelPosition(TPixelPosition(0, 0, 0));
  3641. NEW_SetDstPixelPosition(TPixelPosition(0, 0, 0));
  3642.  
  3643. m_kPPosDust = TPixelPosition(0, 0, 0);
  3644.  
  3645.  
  3646. m_kQue_kCmdNew.clear();
  3647.  
  3648. m_dwLastComboIndex = 0;
  3649.  
  3650. m_swordRefineEffectRight = 0;
  3651. m_swordRefineEffectLeft = 0;
  3652. m_armorRefineEffect = 0;
  3653.  
  3654. #ifdef ENABLE_TITLE_SYSTEM
  3655. m_iTitleID = 0;
  3656. #endif
  3657.  
  3658. m_sAlignment = 0;
  3659.  
  3660. #ifdef ENABLE_EFFECT_SYSTEM
  3661. m_costumeWeaponEffectRight = 0;
  3662. m_costumeWeaponEffectLeft = 0;
  3663. m_costumeBodyEffect = 0;
  3664. #endif
  3665.  
  3666. m_byPKMode = 0;
  3667. m_isKiller = false;
  3668. m_isPartyMember = false;
  3669.  
  3670. m_bEnableTCPState = TRUE;
  3671.  
  3672. m_stName = "";
  3673.  
  3674. memset(m_awPart, 0, sizeof(m_awPart));
  3675. memset(m_adwCRCAffectEffect, 0, sizeof(m_adwCRCAffectEffect));
  3676. //memset(m_adwCRCEmoticonEffect, 0, sizeof(m_adwCRCEmoticonEffect));
  3677. memset(&m_kMovAfterFunc, 0, sizeof(m_kMovAfterFunc));
  3678.  
  3679. m_bDamageEffectType = false;
  3680. m_dwDuelMode = DUEL_NONE;
  3681. m_dwEmoticonTime = 0;
  3682.  
  3683. #ifdef ENABLE_CUSTOM_TITLE_SYSTEM
  3684. m_stTitle = "";
  3685. memset(m_bTitleColor, 0, sizeof(m_bTitleColor));
  3686.  
  3687. m_stTitle2 = "";
  3688. memset(m_bTitle2Color, 0, sizeof(m_bTitle2Color));
  3689. #endif
  3690.  
  3691. }
  3692.  
  3693. CInstanceBase::CInstanceBase()
  3694. {
  3695. __Initialize();
  3696. }
  3697.  
  3698. CInstanceBase::~CInstanceBase()
  3699. {
  3700. Destroy();
  3701. }
  3702.  
  3703. void CInstanceBase::GetBoundBox(D3DXVECTOR3 * vtMin, D3DXVECTOR3 * vtMax)
  3704. {
  3705. m_GraphicThingInstance.GetBoundBox(vtMin, vtMax);
  3706. }
  3707.  
  3708. void CInstanceBase::SetLevel(DWORD lvl)
  3709. {
  3710. m_dwLevel = lvl;
  3711. }
  3712.  
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
Add Comment
Please, Sign In to add comment