Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 80.45 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 "PythonCharacterManager.h"
  7. #include "AbstractPlayer.h"
  8. #include "AbstractApplication.h"
  9. #include "packet.h"
  10.  
  11. #include "../eterlib/StateManager.h"
  12. #include "../gamelib/ItemManager.h"
  13.  
  14. BOOL HAIR_COLOR_ENABLE = FALSE;
  15. BOOL USE_ARMOR_SPECULAR = FALSE;
  16. BOOL RIDE_HORSE_ENABLE = TRUE;
  17. const float c_fDefaultRotationSpeed = 1200.0f;
  18. const float c_fDefaultHorseRotationSpeed = 300.0f;
  19.  
  20.  
  21. bool IsWall(unsigned race)
  22. {
  23. switch (race)
  24. {
  25. case 14201:
  26. case 14202:
  27. case 14203:
  28. case 14204:
  29. return true;
  30. break;
  31. }
  32. return false;
  33. }
  34.  
  35. //////////////////////////////////////////////////////////////////////////////////////
  36.  
  37.  
  38. CInstanceBase::SHORSE::SHORSE()
  39. {
  40. __Initialize();
  41. }
  42.  
  43. CInstanceBase::SHORSE::~SHORSE()
  44. {
  45. assert(m_pkActor == NULL);
  46. }
  47.  
  48. void CInstanceBase::SHORSE::__Initialize()
  49. {
  50. m_isMounting = false;
  51. m_pkActor = NULL;
  52. }
  53.  
  54. void CInstanceBase::SHORSE::SetAttackSpeed(UINT uAtkSpd)
  55. {
  56. if (!IsMounting())
  57. return;
  58.  
  59. CActorInstance& rkActor = GetActorRef();
  60. rkActor.SetAttackSpeed(uAtkSpd / 100.0f);
  61. }
  62.  
  63. void CInstanceBase::SHORSE::SetMoveSpeed(UINT uMovSpd)
  64. {
  65. if (!IsMounting())
  66. return;
  67.  
  68. CActorInstance& rkActor = GetActorRef();
  69. rkActor.SetMoveSpeed(uMovSpd / 100.0f);
  70. }
  71.  
  72. void CInstanceBase::SHORSE::Create(const TPixelPosition& c_rkPPos, UINT eRace, UINT eHitEffect)
  73. {
  74. assert(NULL == m_pkActor && "CInstanceBase::SHORSE::Create - ALREADY MOUNT");
  75.  
  76. m_pkActor = new CActorInstance;
  77.  
  78. CActorInstance& rkActor = GetActorRef();
  79. rkActor.SetEventHandler(CActorInstance::IEventHandler::GetEmptyPtr());
  80. if (!rkActor.SetRace(eRace))
  81. {
  82. delete m_pkActor;
  83. m_pkActor = NULL;
  84. return;
  85. }
  86.  
  87. rkActor.SetShape(0);
  88. rkActor.SetBattleHitEffect(eHitEffect);
  89. rkActor.SetAlphaValue(0.0f);
  90. rkActor.BlendAlphaValue(1.0f, 0.5f);
  91. rkActor.SetMoveSpeed(1.0f);
  92. rkActor.SetAttackSpeed(1.0f);
  93. rkActor.SetMotionMode(CRaceMotionData::MODE_GENERAL);
  94. rkActor.Stop();
  95. rkActor.RefreshActorInstance();
  96.  
  97. rkActor.SetCurPixelPosition(c_rkPPos);
  98.  
  99. m_isMounting = true;
  100. }
  101.  
  102. void CInstanceBase::SHORSE::Destroy()
  103. {
  104. if (m_pkActor)
  105. {
  106. m_pkActor->Destroy();
  107. delete m_pkActor;
  108. }
  109.  
  110. __Initialize();
  111. }
  112.  
  113. CActorInstance& CInstanceBase::SHORSE::GetActorRef()
  114. {
  115. assert(NULL != m_pkActor && "CInstanceBase::SHORSE::GetActorRef");
  116. return *m_pkActor;
  117. }
  118.  
  119. CActorInstance* CInstanceBase::SHORSE::GetActorPtr()
  120. {
  121. return m_pkActor;
  122. }
  123.  
  124. UINT CInstanceBase::SHORSE::GetLevel()
  125. {
  126. if (m_pkActor)
  127. {
  128. DWORD mount = m_pkActor->GetRace();
  129. if (20101 <= mount && 20103 >= mount)
  130. return 0; // sama jazda
  131. if (20104 <= mount && 20106 >= mount)
  132. return 2; // jazda + bicie
  133. if ((20107 <= mount && 99999 >= mount) || (1 <= mount && 20100 >= mount))
  134. return 3; // jazda + bicie + skille
  135. }
  136. }
  137.  
  138. bool CInstanceBase::SHORSE::IsNewMount()
  139. {
  140. if (!m_pkActor)
  141. return false;
  142. DWORD mount = m_pkActor->GetRace();
  143.  
  144. if ((20205 <= mount && 20208 >= mount) ||
  145. (20214 == mount) || (20217 == mount) // ł­ĆřÇŃ Ŕü°©ĽřĽř·Ď, ł­ĆřÇŃ Ŕü°©ľĎĽř·Ď
  146. )
  147. return true;
  148.  
  149. // °í±Ţ Ĺ»°Í
  150. if ((20209 <= mount && 20212 >= mount) ||
  151. (20215 == mount) || (20218 == mount) || // żë¸ÍÇŃ Ŕü°©ĽřĽř·Ď, żë¸ÍÇŃ Ŕü°©ľĎĽř·Ď
  152. (20220 == mount)
  153. )
  154. return true;
  155.  
  156. return false;
  157. }
  158. bool CInstanceBase::SHORSE::CanUseSkill()
  159. {
  160. // ¸¶»ó˝şĹłŔş ¸»ŔÇ ·ąş§ŔĚ 3 ŔĚ»óŔĚľîľß¸¸ ÇÔ.
  161. if (IsMounting())
  162. return 2 < GetLevel();
  163.  
  164. return true;
  165. }
  166.  
  167. bool CInstanceBase::SHORSE::CanAttack()
  168. {
  169. if (IsMounting())
  170. if (GetLevel() <= 1)
  171. return false;
  172.  
  173. return true;
  174. }
  175.  
  176. bool CInstanceBase::SHORSE::IsMounting()
  177. {
  178. return m_isMounting;
  179. }
  180.  
  181. void CInstanceBase::SHORSE::Deform()
  182. {
  183. if (!IsMounting())
  184. return;
  185.  
  186. CActorInstance& rkActor = GetActorRef();
  187. rkActor.INSTANCEBASE_Deform();
  188. }
  189.  
  190. void CInstanceBase::SHORSE::Render()
  191. {
  192. if (!IsMounting())
  193. return;
  194.  
  195. CActorInstance& rkActor = GetActorRef();
  196. rkActor.Render();
  197. }
  198.  
  199. void CInstanceBase::__AttachHorseSaddle()
  200. {
  201. if (!IsMountingHorse())
  202. return;
  203. m_kHorse.m_pkActor->AttachModelInstance(CRaceData::PART_MAIN, "saddle", m_GraphicThingInstance, CRaceData::PART_MAIN);
  204. }
  205.  
  206. void CInstanceBase::__DetachHorseSaddle()
  207. {
  208. if (!IsMountingHorse())
  209. return;
  210. m_kHorse.m_pkActor->DetachModelInstance(CRaceData::PART_MAIN, m_GraphicThingInstance, CRaceData::PART_MAIN);
  211. }
  212.  
  213. //////////////////////////////////////////////////////////////////////////////////////
  214.  
  215. void CInstanceBase::BlockMovement()
  216. {
  217. m_GraphicThingInstance.BlockMovement();
  218. }
  219.  
  220. bool CInstanceBase::IsBlockObject(const CGraphicObjectInstance& c_rkBGObj)
  221. {
  222. return m_GraphicThingInstance.IsBlockObject(c_rkBGObj);
  223. }
  224.  
  225. bool CInstanceBase::AvoidObject(const CGraphicObjectInstance& c_rkBGObj)
  226. {
  227. return m_GraphicThingInstance.AvoidObject(c_rkBGObj);
  228. }
  229.  
  230. ///////////////////////////////////////////////////////////////////////////////////
  231.  
  232. bool __ArmorVnumToShape(int iVnum, DWORD * pdwShape)
  233. {
  234. *pdwShape = iVnum;
  235.  
  236. /////////////////////////////////////////
  237.  
  238. if (0 == iVnum || 1 == iVnum)
  239. return false;
  240.  
  241. if (!USE_ARMOR_SPECULAR)
  242. return false;
  243.  
  244. CItemData * pItemData;
  245. if (!CItemManager::Instance().GetItemDataPointer(iVnum, &pItemData))
  246. return false;
  247.  
  248. enum
  249. {
  250. SHAPE_VALUE_SLOT_INDEX = 3,
  251. };
  252.  
  253. *pdwShape = pItemData->GetValue(SHAPE_VALUE_SLOT_INDEX);
  254.  
  255. return true;
  256. }
  257.  
  258. // 2004.07.05.myevan.±Ă˝ĹĹşżµ ł˘ŔĚ´Â ą®Á¦
  259. class CActorInstanceBackground : public IBackground
  260. {
  261. public:
  262. CActorInstanceBackground() {}
  263. virtual ~CActorInstanceBackground() {}
  264. bool IsBlock(int x, int y)
  265. {
  266. CPythonBackground& rkBG = CPythonBackground::Instance();
  267. return rkBG.isAttrOn(x, y, CTerrainImpl::ATTRIBUTE_BLOCK);
  268. }
  269. };
  270.  
  271. static CActorInstanceBackground gs_kActorInstBG;
  272.  
  273. bool CInstanceBase::LessRenderOrder(CInstanceBase* pkInst)
  274. {
  275. int nMainAlpha = (__GetAlphaValue() < 1.0f) ? 1 : 0;
  276. int nTestAlpha = (pkInst->__GetAlphaValue() < 1.0f) ? 1 : 0;
  277. if (nMainAlpha < nTestAlpha)
  278. return true;
  279. if (nMainAlpha > nTestAlpha)
  280. return false;
  281.  
  282. if (GetRace()<pkInst->GetRace())
  283. return true;
  284. if (GetRace()>pkInst->GetRace())
  285. return false;
  286.  
  287. if (GetShape()<pkInst->GetShape())
  288. return true;
  289.  
  290. if (GetShape()>pkInst->GetShape())
  291. return false;
  292.  
  293. UINT uLeftLODLevel = __LessRenderOrder_GetLODLevel();
  294. UINT uRightLODLevel = pkInst->__LessRenderOrder_GetLODLevel();
  295. if (uLeftLODLevel<uRightLODLevel)
  296. return true;
  297. if (uLeftLODLevel>uRightLODLevel)
  298. return false;
  299.  
  300. if (m_awPart[CRaceData::PART_WEAPON]<pkInst->m_awPart[CRaceData::PART_WEAPON])
  301. return true;
  302.  
  303. return false;
  304. }
  305.  
  306. UINT CInstanceBase::__LessRenderOrder_GetLODLevel()
  307. {
  308. CGrannyLODController* pLODCtrl = m_GraphicThingInstance.GetLODControllerPointer(0);
  309. if (!pLODCtrl)
  310. return 0;
  311.  
  312. return pLODCtrl->GetLODLevel();
  313. }
  314.  
  315. bool CInstanceBase::__Background_GetWaterHeight(const TPixelPosition& c_rkPPos, float* pfHeight)
  316. {
  317. long lHeight;
  318. if (!CPythonBackground::Instance().GetWaterHeight(int(c_rkPPos.x), int(c_rkPPos.y), &lHeight))
  319. return false;
  320.  
  321. *pfHeight = float(lHeight);
  322.  
  323. return true;
  324. }
  325.  
  326. bool CInstanceBase::__Background_IsWaterPixelPosition(const TPixelPosition& c_rkPPos)
  327. {
  328. return CPythonBackground::Instance().isAttrOn(c_rkPPos.x, c_rkPPos.y, CTerrainImpl::ATTRIBUTE_WATER);
  329. }
  330.  
  331. const float PC_DUST_RANGE = 2000.0f;
  332. const float NPC_DUST_RANGE = 1000.0f;
  333.  
  334. DWORD CInstanceBase::ms_dwUpdateCounter = 0;
  335. DWORD CInstanceBase::ms_dwRenderCounter = 0;
  336. DWORD CInstanceBase::ms_dwDeformCounter = 0;
  337.  
  338. CDynamicPool<CInstanceBase> CInstanceBase::ms_kPool;
  339.  
  340. bool CInstanceBase::__IsInDustRange()
  341. {
  342. if (!__IsExistMainInstance())
  343. return false;
  344.  
  345. CInstanceBase* pkInstMain = __GetMainInstancePtr();
  346.  
  347. float fDistance = NEW_GetDistanceFromDestInstance(*pkInstMain);
  348.  
  349. if (IsPC())
  350. {
  351. if (fDistance <= PC_DUST_RANGE)
  352. return true;
  353. }
  354.  
  355. if (fDistance <= NPC_DUST_RANGE)
  356. return true;
  357.  
  358. return false;
  359. }
  360.  
  361. void CInstanceBase::__EnableSkipCollision()
  362. {
  363. if (__IsMainInstance())
  364. {
  365. TraceError("CInstanceBase::__EnableSkipCollision - ŔÚ˝ĹŔş Ă浹°Ë»ç˝şĹµŔĚ µÇ¸é ľČµČ´Ů!!");
  366. return;
  367. }
  368. m_GraphicThingInstance.EnableSkipCollision();
  369. }
  370.  
  371. void CInstanceBase::__DisableSkipCollision()
  372. {
  373. m_GraphicThingInstance.DisableSkipCollision();
  374. }
  375.  
  376. bool CInstanceBase::__CanSkipCollision()
  377. {
  378. return m_GraphicThingInstance.CanSkipCollision();
  379. }
  380.  
  381. DWORD CInstanceBase::__GetShadowMapColor(float x, float y)
  382. {
  383. CPythonBackground& rkBG = CPythonBackground::Instance();
  384. return rkBG.GetShadowMapColor(x, y);
  385. }
  386.  
  387. float CInstanceBase::__GetBackgroundHeight(float x, float y)
  388. {
  389. CPythonBackground& rkBG = CPythonBackground::Instance();
  390. return rkBG.GetHeight(x, y);
  391. }
  392.  
  393. #ifdef __MOVIE_MODE__
  394.  
  395. BOOL CInstanceBase::IsMovieMode()
  396. {
  397. if (IsAffect(AFFECT_INVISIBILITY))
  398. return true;
  399.  
  400. return false;
  401. }
  402.  
  403. #endif
  404.  
  405. BOOL CInstanceBase::IsInvisibility()
  406. {
  407. if (IsAffect(AFFECT_INVISIBILITY))
  408. return true;
  409.  
  410. return false;
  411. }
  412.  
  413. BOOL CInstanceBase::IsParalysis()
  414. {
  415. return m_GraphicThingInstance.IsParalysis();
  416. }
  417.  
  418. BOOL CInstanceBase::IsGameMaster()
  419. {
  420. if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
  421. return true;
  422. return false;
  423. }
  424.  
  425.  
  426. BOOL CInstanceBase::IsSameEmpire(CInstanceBase& rkInstDst)
  427. {
  428. if (0 == rkInstDst.m_dwEmpireID)
  429. return TRUE;
  430.  
  431. if (IsGameMaster())
  432. return TRUE;
  433.  
  434. if (rkInstDst.IsGameMaster())
  435. return TRUE;
  436.  
  437. if (rkInstDst.m_dwEmpireID == m_dwEmpireID)
  438. return TRUE;
  439.  
  440. return FALSE;
  441. }
  442.  
  443. DWORD CInstanceBase::GetEmpireID()
  444. {
  445. return m_dwEmpireID;
  446. }
  447.  
  448. DWORD CInstanceBase::GetGuildID()
  449. {
  450. return m_dwGuildID;
  451. }
  452.  
  453. int CInstanceBase::GetAlignment()
  454. {
  455. return m_sAlignment;
  456. }
  457.  
  458. UINT CInstanceBase::GetAlignmentGrade()
  459. {
  460. if (m_sAlignment >= 12000)
  461. return 0;
  462. else if (m_sAlignment >= 8000)
  463. return 1;
  464. else if (m_sAlignment >= 4000)
  465. return 2;
  466. else if (m_sAlignment >= 1000)
  467. return 3;
  468. else if (m_sAlignment >= 0)
  469. return 4;
  470. else if (m_sAlignment > -4000)
  471. return 5;
  472. else if (m_sAlignment > -8000)
  473. return 6;
  474. else if (m_sAlignment > -12000)
  475. return 7;
  476.  
  477. return 8;
  478. }
  479.  
  480. int CInstanceBase::GetAlignmentType()
  481. {
  482. switch (GetAlignmentGrade())
  483. {
  484. case 0:
  485. case 1:
  486. case 2:
  487. case 3:
  488. {
  489. return ALIGNMENT_TYPE_WHITE;
  490. break;
  491. }
  492.  
  493. case 5:
  494. case 6:
  495. case 7:
  496. case 8:
  497. {
  498. return ALIGNMENT_TYPE_DARK;
  499. break;
  500. }
  501. }
  502.  
  503. return ALIGNMENT_TYPE_NORMAL;
  504. }
  505.  
  506. #ifdef ENABLE_TITLE_SYSTEM
  507. int CInstanceBase::GetPrestige()
  508. {
  509. return m_sPrestige;
  510. }
  511.  
  512. UINT CInstanceBase::GetPrestigeGrade()
  513. {
  514. int pTitle_vegas[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
  515.  
  516. if (m_sPrestige == pTitle_vegas[1])
  517. return 0;
  518. else if (m_sPrestige == pTitle_vegas[2])
  519. return 1;
  520. else if (m_sPrestige == pTitle_vegas[3])
  521. return 2;
  522. else if (m_sPrestige == pTitle_vegas[4])
  523. return 3;
  524. else if (m_sPrestige == pTitle_vegas[5])
  525. return 4;
  526. else if (m_sPrestige == pTitle_vegas[6])
  527. return 5;
  528. else if (m_sPrestige == pTitle_vegas[7])
  529. return 6;
  530. else if (m_sPrestige == pTitle_vegas[8])
  531. return 7;
  532. else if (m_sPrestige == pTitle_vegas[9])
  533. return 8;
  534. else if (m_sPrestige == pTitle_vegas[10])
  535. return 9;
  536. else if (m_sPrestige == pTitle_vegas[11])
  537. return 10;
  538. else if (m_sPrestige == pTitle_vegas[12])
  539. return 11;
  540. else if (m_sPrestige == pTitle_vegas[13])
  541. return 12;
  542. else if (m_sPrestige == pTitle_vegas[14])
  543. return 13;
  544. else if (m_sPrestige == pTitle_vegas[15])
  545. return 14;
  546. else if (m_sPrestige == pTitle_vegas[16])
  547. return 15;
  548. else if (m_sPrestige == pTitle_vegas[17])
  549. return 16;
  550. else if (m_sPrestige == pTitle_vegas[18])
  551. return 17;
  552. else if (m_sPrestige == pTitle_vegas[19])
  553. return 18;
  554. else if (m_sPrestige == pTitle_vegas[0])
  555. return 19;
  556. }
  557. #endif
  558.  
  559. BYTE CInstanceBase::GetPKMode()
  560. {
  561. return m_byPKMode;
  562. }
  563.  
  564. bool CInstanceBase::IsKiller()
  565. {
  566. return m_isKiller;
  567. }
  568.  
  569. bool CInstanceBase::IsPartyMember()
  570. {
  571. return m_isPartyMember;
  572. }
  573.  
  574. BOOL CInstanceBase::IsInSafe()
  575. {
  576. const TPixelPosition& c_rkPPosCur = m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
  577. if (CPythonBackground::Instance().isAttrOn(c_rkPPosCur.x, c_rkPPosCur.y, CTerrainImpl::ATTRIBUTE_BANPK))
  578. return TRUE;
  579.  
  580. return FALSE;
  581. }
  582.  
  583. float CInstanceBase::CalculateDistanceSq3d(const TPixelPosition& c_rkPPosDst)
  584. {
  585. const TPixelPosition& c_rkPPosSrc = m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
  586. return SPixelPosition_CalculateDistanceSq3d(c_rkPPosSrc, c_rkPPosDst);
  587. }
  588.  
  589. void CInstanceBase::OnSelected()
  590. {
  591. #ifdef __MOVIE_MODE__
  592. if (!__IsExistMainInstance())
  593. return;
  594. #endif
  595.  
  596. if (IsStoneDoor())
  597. return;
  598.  
  599. if (IsDead())
  600. return;
  601.  
  602. __AttachSelectEffect();
  603. }
  604.  
  605. void CInstanceBase::OnUnselected()
  606. {
  607. __DetachSelectEffect();
  608. }
  609.  
  610. void CInstanceBase::OnTargeted()
  611. {
  612. #ifdef __MOVIE_MODE__
  613. if (!__IsExistMainInstance())
  614. return;
  615. #endif
  616.  
  617. if (IsStoneDoor())
  618. return;
  619.  
  620. if (IsDead())
  621. return;
  622.  
  623. __AttachTargetEffect();
  624. }
  625.  
  626. void CInstanceBase::OnUntargeted()
  627. {
  628. __DetachTargetEffect();
  629. }
  630.  
  631. void CInstanceBase::DestroySystem()
  632. {
  633. ms_kPool.Clear();
  634. }
  635.  
  636. void CInstanceBase::CreateSystem(UINT uCapacity)
  637. {
  638. ms_kPool.Create(uCapacity);
  639.  
  640. memset(ms_adwCRCAffectEffect, 0, sizeof(ms_adwCRCAffectEffect));
  641.  
  642. ms_fDustGap = 250.0f;
  643. ms_fHorseDustGap = 500.0f;
  644. }
  645.  
  646. CInstanceBase* CInstanceBase::New()
  647. {
  648. return ms_kPool.Alloc();
  649. }
  650.  
  651. void CInstanceBase::Delete(CInstanceBase* pkInst)
  652. {
  653. pkInst->Destroy();
  654. ms_kPool.Free(pkInst);
  655. }
  656.  
  657. void CInstanceBase::SetMainInstance()
  658. {
  659. CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
  660.  
  661. DWORD dwVID = GetVirtualID();
  662. rkChrMgr.SetMainInstance(dwVID);
  663.  
  664. m_GraphicThingInstance.SetMainInstance();
  665. }
  666.  
  667. CInstanceBase* CInstanceBase::__GetMainInstancePtr()
  668. {
  669. CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
  670. return rkChrMgr.GetMainInstancePtr();
  671. }
  672.  
  673. void CInstanceBase::__ClearMainInstance()
  674. {
  675. CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
  676. rkChrMgr.ClearMainInstance();
  677. }
  678.  
  679. /* ˝ÇÁ¦ ÇĂ·ąŔĚľî Äł¸ŻĹÍŔÎÁö Á¶»ç.*/
  680. bool CInstanceBase::__IsMainInstance()
  681. {
  682. if (this == __GetMainInstancePtr())
  683. return true;
  684.  
  685. return false;
  686. }
  687.  
  688. bool CInstanceBase::__IsExistMainInstance()
  689. {
  690. if (__GetMainInstancePtr())
  691. return true;
  692. else
  693. return false;
  694. }
  695.  
  696. bool CInstanceBase::__MainCanSeeHiddenThing()
  697. {
  698. return false;
  699. // CInstanceBase * pInstance = __GetMainInstancePtr();
  700. // return pInstance->IsAffect(AFFECT_GAMJI);
  701. }
  702.  
  703. float CInstanceBase::__GetBowRange()
  704. {
  705. float fRange = 2500.0f - 100.0f;
  706.  
  707. if (__IsMainInstance())
  708. {
  709. IAbstractPlayer& rPlayer = IAbstractPlayer::GetSingleton();
  710. fRange += float(rPlayer.GetStatus(POINT_BOW_DISTANCE));
  711. }
  712.  
  713. return fRange;
  714. }
  715.  
  716. CInstanceBase* CInstanceBase::__FindInstancePtr(DWORD dwVID)
  717. {
  718. CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
  719. return rkChrMgr.GetInstancePtr(dwVID);
  720. }
  721.  
  722. bool CInstanceBase::__FindRaceType(DWORD dwRace, BYTE* pbType)
  723. {
  724. CPythonNonPlayer& rkNonPlayer = CPythonNonPlayer::Instance();
  725. return rkNonPlayer.GetInstanceType(dwRace, pbType);
  726. }
  727.  
  728. bool CInstanceBase::Create(const SCreateData& c_rkCreateData)
  729. {
  730. IAbstractApplication::GetSingleton().SkipRenderBuffering(300);
  731.  
  732. SetInstanceType(c_rkCreateData.m_bType);
  733.  
  734.  
  735. if (!SetRace(c_rkCreateData.m_dwRace))
  736. return false;
  737.  
  738. SetVirtualID(c_rkCreateData.m_dwVID);
  739.  
  740. if (c_rkCreateData.m_isMain)
  741. SetMainInstance();
  742.  
  743. if (IsGuildWall())
  744. {
  745. unsigned center_x;
  746. unsigned center_y;
  747.  
  748. c_rkCreateData.m_kAffectFlags.ConvertToPosition(&center_x, &center_y);
  749.  
  750. float center_z = __GetBackgroundHeight(center_x, center_y);
  751. NEW_SetPixelPosition(TPixelPosition(float(c_rkCreateData.m_lPosX), float(c_rkCreateData.m_lPosY), center_z));
  752. }
  753. else
  754. {
  755. SCRIPT_SetPixelPosition(float(c_rkCreateData.m_lPosX), float(c_rkCreateData.m_lPosY));
  756. }
  757.  
  758. if (0 != c_rkCreateData.m_dwMountVnum)
  759. MountHorse(c_rkCreateData.m_dwMountVnum);
  760.  
  761. SetArmor(c_rkCreateData.m_dwArmor);
  762.  
  763. if (IsPC())
  764. {
  765. SetHair(c_rkCreateData.m_dwHair);
  766. SetWeapon(c_rkCreateData.m_dwWeapon);
  767. }
  768.  
  769. __Create_SetName(c_rkCreateData);
  770.  
  771. if (IsEnemy() || IsStone())
  772. m_dwLevel = CPythonNonPlayer::Instance().GetMobLevel(GetRace());
  773. else
  774. m_dwLevel = c_rkCreateData.m_dwLevel;
  775.  
  776. m_dwGuildID = c_rkCreateData.m_dwGuildID;
  777. m_dwEmpireID = c_rkCreateData.m_dwEmpireID;
  778.  
  779. SetVirtualNumber(c_rkCreateData.m_dwRace);
  780. SetRotation(c_rkCreateData.m_fRot);
  781.  
  782. SetAlignment(c_rkCreateData.m_sAlignment);
  783. #ifdef ENABLE_TITLE_SYSTEM
  784. SetPrestige(c_rkCreateData.m_sPrestige);
  785. #endif
  786. SetPKMode(c_rkCreateData.m_byPKMode);
  787.  
  788. SetMoveSpeed(c_rkCreateData.m_dwMovSpd);
  789. SetAttackSpeed(c_rkCreateData.m_dwAtkSpd);
  790.  
  791. // NOTE : Dress ¸¦ ŔÔ°í ŔÖŔ¸¸é Alpha ¸¦ łÖÁö ľĘ´Â´Ů.
  792. if (!IsWearingDress())
  793. {
  794. // NOTE : ąÝµĺ˝Ă Affect ĽÂĆĂ Ŕ­ÂĘżˇ ŔÖľîľß ÇÔ
  795. m_GraphicThingInstance.SetAlphaValue(0.0f);
  796. m_GraphicThingInstance.BlendAlphaValue(1.0f, 0.5f);
  797. }
  798.  
  799. if (!IsGuildWall())
  800. {
  801. SetAffectFlagContainer(c_rkCreateData.m_kAffectFlags);
  802. }
  803.  
  804. // NOTE : ąÝµĺ˝Ă Affect ĽÂĆĂ ČÄżˇ ÇŘľß ÇÔ
  805. AttachTextTail();
  806. RefreshTextTail();
  807.  
  808. if (c_rkCreateData.m_dwStateFlags & ADD_CHARACTER_STATE_SPAWN)
  809. {
  810. if (IsAffect(AFFECT_SPAWN))
  811. __AttachEffect(EFFECT_SPAWN_APPEAR);
  812.  
  813. if (IsPC())
  814. {
  815. Refresh(CRaceMotionData::NAME_WAIT, true);
  816. }
  817. else
  818. {
  819. Refresh(CRaceMotionData::NAME_SPAWN, false);
  820. }
  821. }
  822. else
  823. {
  824. Refresh(CRaceMotionData::NAME_WAIT, true);
  825. }
  826.  
  827. __AttachEmpireEffect(c_rkCreateData.m_dwEmpireID);
  828.  
  829. RegisterBoundingSphere();
  830.  
  831. if (c_rkCreateData.m_dwStateFlags & ADD_CHARACTER_STATE_DEAD)
  832. m_GraphicThingInstance.DieEnd();
  833.  
  834. SetStateFlags(c_rkCreateData.m_dwStateFlags);
  835.  
  836. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  837.  
  838. if (!IsPC())
  839. {
  840. DWORD dwBodyColor = CPythonNonPlayer::Instance().GetMonsterColor(c_rkCreateData.m_dwRace);
  841. if (0 != dwBodyColor)
  842. {
  843. SetModulateRenderMode();
  844. SetAddColor(dwBodyColor);
  845. }
  846. }
  847.  
  848. __AttachHorseSaddle();
  849.  
  850. // ±ćµĺ ˝ÉşĽŔ» Ŕ§ÇŃ Ŕӽà ÄÚµĺ, ŔűÁ¤ Ŕ§Äˇ¸¦ ĂŁ´Â Áß
  851. const int c_iGuildSymbolRace = 14200;
  852. if (c_iGuildSymbolRace == GetRace())
  853. {
  854. std::string strFileName = GetGuildSymbolFileName(m_dwGuildID);
  855. if (IsFile(strFileName.c_str()))
  856. m_GraphicThingInstance.ChangeMaterial(strFileName.c_str());
  857. }
  858.  
  859. return true;
  860. }
  861.  
  862.  
  863. void CInstanceBase::__Create_SetName(const SCreateData& c_rkCreateData)
  864. {
  865. if (IsGoto())
  866. {
  867. SetNameString("", 0);
  868. return;
  869. }
  870. if (IsWarp())
  871. {
  872. __Create_SetWarpName(c_rkCreateData);
  873. return;
  874. }
  875.  
  876. SetNameString(c_rkCreateData.m_stName.c_str(), c_rkCreateData.m_stName.length());
  877. }
  878.  
  879. void CInstanceBase::__Create_SetWarpName(const SCreateData& c_rkCreateData)
  880. {
  881. const char * c_szName;
  882. if (CPythonNonPlayer::Instance().GetName(c_rkCreateData.m_dwRace, &c_szName))
  883. {
  884. std::string strName = c_szName;
  885. int iFindingPos = strName.find_first_of(" ", 0);
  886. if (iFindingPos > 0)
  887. {
  888. strName.resize(iFindingPos);
  889. }
  890. SetNameString(strName.c_str(), strName.length());
  891. }
  892. else
  893. {
  894. SetNameString(c_rkCreateData.m_stName.c_str(), c_rkCreateData.m_stName.length());
  895. }
  896. }
  897.  
  898. void CInstanceBase::SetNameString(const char* c_szName, int len)
  899. {
  900. m_stName.assign(c_szName, len);
  901. }
  902.  
  903.  
  904. bool CInstanceBase::SetRace(DWORD eRace)
  905. {
  906. m_dwRace = eRace;
  907.  
  908. if (!m_GraphicThingInstance.SetRace(eRace))
  909. return false;
  910.  
  911. if (!__FindRaceType(m_dwRace, &m_eRaceType))
  912. m_eRaceType = CActorInstance::TYPE_PC;
  913.  
  914. return true;
  915. }
  916.  
  917. BOOL CInstanceBase::__IsChangableWeapon(int iWeaponID)
  918. {
  919. // µĺ·ą˝ş ŔÔ°í ŔÖŔ»¶§´Â şÎÄÉżÜŔÇ Ŕĺşń´Â łŞżŔÁö ľĘ°Ô..
  920. if (IsWearingDress())
  921. {
  922. const int c_iBouquets[] =
  923. {
  924. 50201, // Bouquet for Assassin
  925. 50202, // Bouquet for Shaman
  926. 50203,
  927. 50204,
  928. 0, // #0000545: [M2CN] żţµů µĺ·ą˝şżÍ Ŕĺşń Âřżë ą®Á¦
  929. };
  930.  
  931. for (int i = 0; c_iBouquets[i] != 0; ++i)
  932. if (iWeaponID == c_iBouquets[i])
  933. return true;
  934.  
  935. return false;
  936. }
  937. else
  938. return true;
  939. }
  940.  
  941. BOOL CInstanceBase::IsWearingDress()
  942. {
  943. const int c_iWeddingDressShape = 201;
  944. return c_iWeddingDressShape == m_eShape;
  945. }
  946.  
  947. BOOL CInstanceBase::IsHoldingPickAxe()
  948. {
  949. const int c_iPickAxeStart = 29101;
  950. const int c_iPickAxeEnd = 29110;
  951. return m_awPart[CRaceData::PART_WEAPON] >= c_iPickAxeStart && m_awPart[CRaceData::PART_WEAPON] <= c_iPickAxeEnd;
  952. }
  953.  
  954. BOOL CInstanceBase::IsNewMount()
  955. {
  956. return m_kHorse.IsNewMount();
  957. }
  958.  
  959. BOOL CInstanceBase::IsMountingHorse()
  960. {
  961. return m_kHorse.IsMounting();
  962. }
  963.  
  964. void CInstanceBase::MountHorse(UINT eRace)
  965. {
  966. m_kHorse.Destroy();
  967. m_kHorse.Create(m_GraphicThingInstance.NEW_GetCurPixelPositionRef(), eRace, ms_adwCRCAffectEffect[EFFECT_HIT]);
  968.  
  969. SetMotionMode(CRaceMotionData::MODE_HORSE);
  970. SetRotationSpeed(c_fDefaultHorseRotationSpeed);
  971.  
  972. m_GraphicThingInstance.MountHorse(m_kHorse.GetActorPtr());
  973. m_GraphicThingInstance.Stop();
  974. m_GraphicThingInstance.RefreshActorInstance();
  975. }
  976.  
  977. void CInstanceBase::DismountHorse()
  978. {
  979. m_kHorse.Destroy();
  980. }
  981.  
  982. void CInstanceBase::GetInfo(std::string* pstInfo)
  983. {
  984. char szInfo[256];
  985. sprintf(szInfo, "Inst - UC %d, RC %d Pool - %d ",
  986. ms_dwUpdateCounter,
  987. ms_dwRenderCounter,
  988. ms_kPool.GetCapacity()
  989. );
  990.  
  991. pstInfo->append(szInfo);
  992. }
  993.  
  994. void CInstanceBase::ResetPerformanceCounter()
  995. {
  996. ms_dwUpdateCounter = 0;
  997. ms_dwRenderCounter = 0;
  998. ms_dwDeformCounter = 0;
  999. }
  1000.  
  1001. bool CInstanceBase::NEW_IsLastPixelPosition()
  1002. {
  1003. return m_GraphicThingInstance.IsPushing();
  1004. }
  1005.  
  1006. const TPixelPosition& CInstanceBase::NEW_GetLastPixelPositionRef()
  1007. {
  1008. return m_GraphicThingInstance.NEW_GetLastPixelPositionRef();
  1009. }
  1010.  
  1011. void CInstanceBase::NEW_SetDstPixelPositionZ(FLOAT z)
  1012. {
  1013. m_GraphicThingInstance.NEW_SetDstPixelPositionZ(z);
  1014. }
  1015.  
  1016. void CInstanceBase::NEW_SetDstPixelPosition(const TPixelPosition& c_rkPPosDst)
  1017. {
  1018. m_GraphicThingInstance.NEW_SetDstPixelPosition(c_rkPPosDst);
  1019. }
  1020.  
  1021. void CInstanceBase::NEW_SetSrcPixelPosition(const TPixelPosition& c_rkPPosSrc)
  1022. {
  1023. m_GraphicThingInstance.NEW_SetSrcPixelPosition(c_rkPPosSrc);
  1024. }
  1025.  
  1026. const TPixelPosition& CInstanceBase::NEW_GetCurPixelPositionRef()
  1027. {
  1028. return m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
  1029. }
  1030.  
  1031. const TPixelPosition& CInstanceBase::NEW_GetDstPixelPositionRef()
  1032. {
  1033. return m_GraphicThingInstance.NEW_GetDstPixelPositionRef();
  1034. }
  1035.  
  1036. const TPixelPosition& CInstanceBase::NEW_GetSrcPixelPositionRef()
  1037. {
  1038. return m_GraphicThingInstance.NEW_GetSrcPixelPositionRef();
  1039. }
  1040.  
  1041. /////////////////////////////////////////////////////////////////////////////////////////////////
  1042. void CInstanceBase::OnSyncing()
  1043. {
  1044. m_GraphicThingInstance.__OnSyncing();
  1045. }
  1046.  
  1047. void CInstanceBase::OnWaiting()
  1048. {
  1049. m_GraphicThingInstance.__OnWaiting();
  1050. }
  1051.  
  1052. void CInstanceBase::OnMoving()
  1053. {
  1054. m_GraphicThingInstance.__OnMoving();
  1055. }
  1056.  
  1057. void CInstanceBase::ChangeGuild(DWORD dwGuildID)
  1058. {
  1059. m_dwGuildID = dwGuildID;
  1060.  
  1061. DetachTextTail();
  1062. AttachTextTail();
  1063. RefreshTextTail();
  1064. }
  1065.  
  1066. DWORD CInstanceBase::GetPart(CRaceData::EParts part)
  1067. {
  1068. assert(part >= 0 && part < CRaceData::PART_MAX_NUM);
  1069. return m_awPart[part];
  1070. }
  1071.  
  1072. DWORD CInstanceBase::GetShape()
  1073. {
  1074. return m_eShape;
  1075. }
  1076.  
  1077. bool CInstanceBase::CanAct()
  1078. {
  1079. return m_GraphicThingInstance.CanAct();
  1080. }
  1081.  
  1082. bool CInstanceBase::CanMove()
  1083. {
  1084. return m_GraphicThingInstance.CanMove();
  1085. }
  1086.  
  1087. bool CInstanceBase::CanUseSkill()
  1088. {
  1089. if (IsPoly())
  1090. return false;
  1091.  
  1092. if (IsWearingDress())
  1093. return false;
  1094.  
  1095. if (IsHoldingPickAxe())
  1096. return false;
  1097.  
  1098. if (!m_kHorse.CanUseSkill())
  1099. return false;
  1100.  
  1101. if (!m_GraphicThingInstance.CanUseSkill())
  1102. return false;
  1103.  
  1104. return true;
  1105. }
  1106.  
  1107. bool CInstanceBase::CanAttack()
  1108. {
  1109. if (!m_kHorse.CanAttack())
  1110. return false;
  1111.  
  1112. if (IsWearingDress())
  1113. return false;
  1114.  
  1115. if (IsHoldingPickAxe())
  1116. return false;
  1117.  
  1118. return m_GraphicThingInstance.CanAttack();
  1119. }
  1120.  
  1121.  
  1122.  
  1123. bool CInstanceBase::CanFishing()
  1124. {
  1125. return m_GraphicThingInstance.CanFishing();
  1126. }
  1127.  
  1128.  
  1129. BOOL CInstanceBase::IsBowMode()
  1130. {
  1131. return m_GraphicThingInstance.IsBowMode();
  1132. }
  1133.  
  1134. BOOL CInstanceBase::IsHandMode()
  1135. {
  1136. return m_GraphicThingInstance.IsHandMode();
  1137. }
  1138.  
  1139. BOOL CInstanceBase::IsFishingMode()
  1140. {
  1141. if (CRaceMotionData::MODE_FISHING == m_GraphicThingInstance.GetMotionMode())
  1142. return true;
  1143.  
  1144. return false;
  1145. }
  1146.  
  1147. BOOL CInstanceBase::IsFishing()
  1148. {
  1149. return m_GraphicThingInstance.IsFishing();
  1150. }
  1151.  
  1152. BOOL CInstanceBase::IsDead()
  1153. {
  1154. return m_GraphicThingInstance.IsDead();
  1155. }
  1156.  
  1157. BOOL CInstanceBase::IsStun()
  1158. {
  1159. return m_GraphicThingInstance.IsStun();
  1160. }
  1161.  
  1162. BOOL CInstanceBase::IsSleep()
  1163. {
  1164. return m_GraphicThingInstance.IsSleep();
  1165. }
  1166.  
  1167.  
  1168. BOOL CInstanceBase::__IsSyncing()
  1169. {
  1170. return m_GraphicThingInstance.__IsSyncing();
  1171. }
  1172.  
  1173.  
  1174.  
  1175. void CInstanceBase::NEW_SetOwner(DWORD dwVIDOwner)
  1176. {
  1177. m_GraphicThingInstance.SetOwner(dwVIDOwner);
  1178. }
  1179.  
  1180. float CInstanceBase::GetLocalTime()
  1181. {
  1182. return m_GraphicThingInstance.GetLocalTime();
  1183. }
  1184.  
  1185.  
  1186. void CInstanceBase::PushUDPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg)
  1187. {
  1188. }
  1189.  
  1190. DWORD ELTimer_GetServerFrameMSec();
  1191.  
  1192. void CInstanceBase::PushTCPStateExpanded(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg, UINT uTargetVID)
  1193. {
  1194. SCommand kCmdNew;
  1195. kCmdNew.m_kPPosDst = c_rkPPosDst;
  1196. kCmdNew.m_dwChkTime = dwCmdTime + 100;
  1197. kCmdNew.m_dwCmdTime = dwCmdTime;
  1198. kCmdNew.m_fDstRot = fDstRot;
  1199. kCmdNew.m_eFunc = eFunc;
  1200. kCmdNew.m_uArg = uArg;
  1201. kCmdNew.m_uTargetVID = uTargetVID;
  1202. m_kQue_kCmdNew.push_back(kCmdNew);
  1203. }
  1204.  
  1205. void CInstanceBase::PushTCPState(DWORD dwCmdTime, const TPixelPosition& c_rkPPosDst, float fDstRot, UINT eFunc, UINT uArg)
  1206. {
  1207. if (__IsMainInstance())
  1208. {
  1209. //assert(!"CInstanceBase::PushTCPState ÇĂ·ąŔĚľî Ŕڽſˇ°Ô Ŕ̵żĆĐŶŔş żŔ¸é ľČµČ´Ů!");
  1210. TraceError("CInstanceBase::PushTCPState ÇĂ·ąŔĚľî Ŕڽſˇ°Ô Ŕ̵żĆĐŶŔş żŔ¸é ľČµČ´Ů!");
  1211. return;
  1212. }
  1213.  
  1214. int nNetworkGap = ELTimer_GetServerFrameMSec() - dwCmdTime;
  1215.  
  1216. m_nAverageNetworkGap = (m_nAverageNetworkGap * 70 + nNetworkGap * 30) / 100;
  1217.  
  1218. /*
  1219. if (m_dwBaseCmdTime == 0)
  1220. {
  1221. m_dwBaseChkTime = ELTimer_GetFrameMSec()-nNetworkGap;
  1222. m_dwBaseCmdTime = dwCmdTime;
  1223.  
  1224. Tracenf("VID[%d] ł×Ć®ż÷°¸ [%d]", GetVirtualID(), nNetworkGap);
  1225. }
  1226. */
  1227.  
  1228. //m_dwBaseChkTime-m_dwBaseCmdTime+ELTimer_GetServerMSec();
  1229.  
  1230. SCommand kCmdNew;
  1231. kCmdNew.m_kPPosDst = c_rkPPosDst;
  1232. kCmdNew.m_dwChkTime = dwCmdTime + m_nAverageNetworkGap;//m_dwBaseChkTime + (dwCmdTime - m_dwBaseCmdTime);// + nNetworkGap;
  1233. kCmdNew.m_dwCmdTime = dwCmdTime;
  1234. kCmdNew.m_fDstRot = fDstRot;
  1235. kCmdNew.m_eFunc = eFunc;
  1236. kCmdNew.m_uArg = uArg;
  1237. m_kQue_kCmdNew.push_back(kCmdNew);
  1238.  
  1239. //int nApplyGap=kCmdNew.m_dwChkTime-ELTimer_GetServerFrameMSec();
  1240.  
  1241. //if (nApplyGap<-500 || nApplyGap>500)
  1242. // Tracenf("VID[%d] NAME[%s] ł×Ć®ż÷°¸ [cur:%d ave:%d] Ŕ۵ż˝Ă°Ł (%d)", GetVirtualID(), GetNameString(), nNetworkGap, m_nAverageNetworkGap, nApplyGap);
  1243. }
  1244.  
  1245. /*
  1246. CInstanceBase::TStateQueue::iterator CInstanceBase::FindSameState(TStateQueue& rkQuekStt, DWORD dwCmdTime, UINT eFunc, UINT uArg)
  1247. {
  1248. TStateQueue::iterator i=rkQuekStt.begin();
  1249. while (rkQuekStt.end()!=i)
  1250. {
  1251. SState& rkSttEach=*i;
  1252. if (rkSttEach.m_dwCmdTime==dwCmdTime)
  1253. if (rkSttEach.m_eFunc==eFunc)
  1254. if (rkSttEach.m_uArg==uArg)
  1255. break;
  1256. ++i;
  1257. }
  1258.  
  1259. return i;
  1260. }
  1261. */
  1262.  
  1263. BOOL CInstanceBase::__CanProcessNetworkStatePacket()
  1264. {
  1265. if (m_GraphicThingInstance.IsDead())
  1266. return FALSE;
  1267. if (m_GraphicThingInstance.IsKnockDown())
  1268. return FALSE;
  1269. if (m_GraphicThingInstance.IsUsingSkill())
  1270. if (!m_GraphicThingInstance.CanCancelSkill())
  1271. return FALSE;
  1272.  
  1273. return TRUE;
  1274. }
  1275.  
  1276. BOOL CInstanceBase::__IsEnableTCPProcess(UINT eCurFunc)
  1277. {
  1278. if (m_GraphicThingInstance.IsActEmotion())
  1279. {
  1280. return FALSE;
  1281. }
  1282.  
  1283. if (!m_bEnableTCPState)
  1284. {
  1285. if (FUNC_EMOTION != eCurFunc)
  1286. {
  1287. return FALSE;
  1288. }
  1289. }
  1290.  
  1291. return TRUE;
  1292. }
  1293.  
  1294. void CInstanceBase::StateProcess()
  1295. {
  1296. while (1)
  1297. {
  1298. if (m_kQue_kCmdNew.empty())
  1299. return;
  1300.  
  1301. DWORD dwDstChkTime = m_kQue_kCmdNew.front().m_dwChkTime;
  1302. DWORD dwCurChkTime = ELTimer_GetServerFrameMSec();
  1303.  
  1304. if (dwCurChkTime < dwDstChkTime)
  1305. return;
  1306.  
  1307. SCommand kCmdTop = m_kQue_kCmdNew.front();
  1308. m_kQue_kCmdNew.pop_front();
  1309.  
  1310. TPixelPosition kPPosDst = kCmdTop.m_kPPosDst;
  1311. //DWORD dwCmdTime = kCmdTop.m_dwCmdTime;
  1312. FLOAT fRotDst = kCmdTop.m_fDstRot;
  1313. UINT eFunc = kCmdTop.m_eFunc;
  1314. UINT uArg = kCmdTop.m_uArg;
  1315. UINT uVID = GetVirtualID();
  1316. UINT uTargetVID = kCmdTop.m_uTargetVID;
  1317.  
  1318. TPixelPosition kPPosCur;
  1319. NEW_GetPixelPosition(&kPPosCur);
  1320.  
  1321. /*
  1322. if (IsPC())
  1323. Tracenf("%d cmd: vid=%d[%s] func=%d arg=%d curPos=(%f, %f) dstPos=(%f, %f) rot=%f (time %d)",
  1324. ELTimer_GetMSec(),
  1325. uVID, m_stName.c_str(), eFunc, uArg,
  1326. kPPosCur.x, kPPosCur.y,
  1327. kPPosDst.x, kPPosDst.y, fRotDst, dwCmdTime-m_dwBaseCmdTime);
  1328. */
  1329.  
  1330. TPixelPosition kPPosDir = kPPosDst - kPPosCur;
  1331. float fDirLen = (float)sqrt(kPPosDir.x * kPPosDir.x + kPPosDir.y * kPPosDir.y);
  1332.  
  1333. //Tracenf("°Ĺ¸® %f", fDirLen);
  1334.  
  1335. if (!__CanProcessNetworkStatePacket())
  1336. {
  1337. Lognf(0, "vid=%d żňÁ÷ŔĎ Ľö ľř´Â »óĹÂ¶ó ˝şĹµ IsDead=%d, IsKnockDown=%d", uVID, m_GraphicThingInstance.IsDead(), m_GraphicThingInstance.IsKnockDown());
  1338. return;
  1339. }
  1340.  
  1341. if (!__IsEnableTCPProcess(eFunc))
  1342. {
  1343. return;
  1344. }
  1345.  
  1346. switch (eFunc)
  1347. {
  1348. case FUNC_WAIT:
  1349. {
  1350. //Tracenf("%s (%f, %f) -> (%f, %f) ł˛Ŕş°Ĺ¸® %f", GetNameString(), kPPosCur.x, kPPosCur.y, kPPosDst.x, kPPosDst.y, fDirLen);
  1351. if (fDirLen > 1.0f)
  1352. {
  1353. //NEW_GetSrcPixelPositionRef() = kPPosCur;
  1354. //NEW_GetDstPixelPositionRef() = kPPosDst;
  1355. NEW_SetSrcPixelPosition(kPPosCur);
  1356. NEW_SetDstPixelPosition(kPPosDst);
  1357.  
  1358. __EnableSkipCollision();
  1359.  
  1360. m_fDstRot = fRotDst;
  1361. m_isGoing = TRUE;
  1362.  
  1363. m_kMovAfterFunc.eFunc = FUNC_WAIT;
  1364.  
  1365. if (!IsWalking())
  1366. StartWalking();
  1367.  
  1368. //Tracen("¸ńÇĄÁ¤Áö");
  1369. }
  1370. else
  1371. {
  1372. //Tracen("ÇöŔç Á¤Áö");
  1373.  
  1374. m_isGoing = FALSE;
  1375.  
  1376. if (!IsWaiting())
  1377. EndWalking();
  1378.  
  1379. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1380. SetAdvancingRotation(fRotDst);
  1381. SetRotation(fRotDst);
  1382. }
  1383. break;
  1384. }
  1385.  
  1386. case FUNC_MOVE:
  1387. {
  1388. //NEW_GetSrcPixelPositionRef() = kPPosCur;
  1389. //NEW_GetDstPixelPositionRef() = kPPosDst;
  1390. NEW_SetSrcPixelPosition(kPPosCur);
  1391. NEW_SetDstPixelPosition(kPPosDst);
  1392. m_fDstRot = fRotDst;
  1393. m_isGoing = TRUE;
  1394. __EnableSkipCollision();
  1395. //m_isSyncMov = TRUE;
  1396.  
  1397. m_kMovAfterFunc.eFunc = FUNC_MOVE;
  1398.  
  1399. if (!IsWalking())
  1400. {
  1401. //Tracen("°Č°í ŔÖÁö ľĘľĆ °Č±â ˝ĂŔŰ");
  1402. StartWalking();
  1403. }
  1404. else
  1405. {
  1406. //Tracen("ŔĚąĚ °Č´ÂÁß ");
  1407. }
  1408. break;
  1409. }
  1410.  
  1411. case FUNC_COMBO:
  1412. {
  1413. if (fDirLen >= 50.0f)
  1414. {
  1415. NEW_SetSrcPixelPosition(kPPosCur);
  1416. NEW_SetDstPixelPosition(kPPosDst);
  1417. m_fDstRot = fRotDst;
  1418. m_isGoing = TRUE;
  1419. __EnableSkipCollision();
  1420.  
  1421. m_kMovAfterFunc.eFunc = FUNC_COMBO;
  1422. m_kMovAfterFunc.uArg = uArg;
  1423.  
  1424. if (!IsWalking())
  1425. StartWalking();
  1426. }
  1427. else
  1428. {
  1429. //Tracen("´ë±â °ř°Ý Á¤Áö");
  1430.  
  1431. m_isGoing = FALSE;
  1432.  
  1433. if (IsWalking())
  1434. EndWalking();
  1435.  
  1436. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1437. RunComboAttack(fRotDst, uArg);
  1438. }
  1439. break;
  1440. }
  1441.  
  1442. case FUNC_ATTACK:
  1443. {
  1444. if (fDirLen >= 50.0f)
  1445. {
  1446. //NEW_GetSrcPixelPositionRef() = kPPosCur;
  1447. //NEW_GetDstPixelPositionRef() = kPPosDst;
  1448. NEW_SetSrcPixelPosition(kPPosCur);
  1449. NEW_SetDstPixelPosition(kPPosDst);
  1450. m_fDstRot = fRotDst;
  1451. m_isGoing = TRUE;
  1452. __EnableSkipCollision();
  1453. //m_isSyncMov = TRUE;
  1454.  
  1455. m_kMovAfterFunc.eFunc = FUNC_ATTACK;
  1456.  
  1457. if (!IsWalking())
  1458. StartWalking();
  1459.  
  1460. //Tracen("łĘą« ¸ÖľîĽ­ Ŕ̵ż ČÄ °ř°Ý");
  1461. }
  1462. else
  1463. {
  1464. //Tracen("łë¸» °ř°Ý Á¤Áö");
  1465.  
  1466. m_isGoing = FALSE;
  1467.  
  1468. if (IsWalking())
  1469. EndWalking();
  1470.  
  1471. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1472. BlendRotation(fRotDst);
  1473.  
  1474. RunNormalAttack(fRotDst);
  1475.  
  1476. //Tracen("°ˇ±ő±â ¶§ą®żˇ żöÇÁ °ř°Ý");
  1477. }
  1478. break;
  1479. }
  1480.  
  1481. case FUNC_MOB_SKILL:
  1482. {
  1483. if (fDirLen >= 50.0f)
  1484. {
  1485. NEW_SetSrcPixelPosition(kPPosCur);
  1486. NEW_SetDstPixelPosition(kPPosDst);
  1487. m_fDstRot = fRotDst;
  1488. m_isGoing = TRUE;
  1489. __EnableSkipCollision();
  1490.  
  1491. m_kMovAfterFunc.eFunc = FUNC_MOB_SKILL;
  1492. m_kMovAfterFunc.uArg = uArg;
  1493.  
  1494. if (!IsWalking())
  1495. StartWalking();
  1496. }
  1497. else
  1498. {
  1499. m_isGoing = FALSE;
  1500.  
  1501. if (IsWalking())
  1502. EndWalking();
  1503.  
  1504. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1505. BlendRotation(fRotDst);
  1506.  
  1507. m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_SPECIAL_1 + uArg);
  1508. }
  1509. break;
  1510. }
  1511.  
  1512. case FUNC_EMOTION:
  1513. {
  1514. if (fDirLen>100.0f)
  1515. {
  1516. NEW_SetSrcPixelPosition(kPPosCur);
  1517. NEW_SetDstPixelPosition(kPPosDst);
  1518. m_fDstRot = fRotDst;
  1519. m_isGoing = TRUE;
  1520.  
  1521. if (__IsMainInstance())
  1522. __EnableSkipCollision();
  1523.  
  1524. m_kMovAfterFunc.eFunc = FUNC_EMOTION;
  1525. m_kMovAfterFunc.uArg = uArg;
  1526. m_kMovAfterFunc.uArgExpanded = uTargetVID;
  1527. m_kMovAfterFunc.kPosDst = kPPosDst;
  1528.  
  1529. if (!IsWalking())
  1530. StartWalking();
  1531. }
  1532. else
  1533. {
  1534. __ProcessFunctionEmotion(uArg, uTargetVID, kPPosDst);
  1535. }
  1536. break;
  1537. }
  1538.  
  1539. default:
  1540. {
  1541. if (eFunc & FUNC_SKILL)
  1542. {
  1543. if (fDirLen >= 50.0f)
  1544. {
  1545. //NEW_GetSrcPixelPositionRef() = kPPosCur;
  1546. //NEW_GetDstPixelPositionRef() = kPPosDst;
  1547. NEW_SetSrcPixelPosition(kPPosCur);
  1548. NEW_SetDstPixelPosition(kPPosDst);
  1549. m_fDstRot = fRotDst;
  1550. m_isGoing = TRUE;
  1551. //m_isSyncMov = TRUE;
  1552. __EnableSkipCollision();
  1553.  
  1554. m_kMovAfterFunc.eFunc = eFunc;
  1555. m_kMovAfterFunc.uArg = uArg;
  1556.  
  1557. if (!IsWalking())
  1558. StartWalking();
  1559.  
  1560. //Tracen("łĘą« ¸ÖľîĽ­ Ŕ̵ż ČÄ °ř°Ý");
  1561. }
  1562. else
  1563. {
  1564. //Tracen("˝şĹł Á¤Áö");
  1565.  
  1566. m_isGoing = FALSE;
  1567.  
  1568. if (IsWalking())
  1569. EndWalking();
  1570.  
  1571. SCRIPT_SetPixelPosition(kPPosDst.x, kPPosDst.y);
  1572. SetAdvancingRotation(fRotDst);
  1573. SetRotation(fRotDst);
  1574.  
  1575. NEW_UseSkill(0, eFunc & 0x7f, uArg & 0x0f, (uArg >> 4) ? true : false);
  1576. //Tracen("°ˇ±ő±â ¶§ą®żˇ żöÇÁ °ř°Ý");
  1577. }
  1578. }
  1579. break;
  1580. }
  1581. }
  1582. }
  1583. }
  1584.  
  1585.  
  1586. void CInstanceBase::MovementProcess()
  1587. {
  1588. TPixelPosition kPPosCur;
  1589. NEW_GetPixelPosition(&kPPosCur);
  1590.  
  1591. // ·»´ő¸µ ÁÂÇĄ°čŔ̹ǷΠy¸¦ -Č­ÇŘĽ­ ´őÇŃ´Ů.
  1592.  
  1593. TPixelPosition kPPosNext;
  1594. {
  1595. const D3DXVECTOR3 & c_rkV3Mov = m_GraphicThingInstance.GetMovementVectorRef();
  1596.  
  1597. kPPosNext.x = kPPosCur.x + (+c_rkV3Mov.x);
  1598. kPPosNext.y = kPPosCur.y + (-c_rkV3Mov.y);
  1599. kPPosNext.z = kPPosCur.z + (+c_rkV3Mov.z);
  1600. }
  1601.  
  1602. TPixelPosition kPPosDeltaSC = kPPosCur - NEW_GetSrcPixelPositionRef();
  1603. TPixelPosition kPPosDeltaSN = kPPosNext - NEW_GetSrcPixelPositionRef();
  1604. TPixelPosition kPPosDeltaSD = NEW_GetDstPixelPositionRef() - NEW_GetSrcPixelPositionRef();
  1605.  
  1606. float fCurLen = sqrtf(kPPosDeltaSC.x * kPPosDeltaSC.x + kPPosDeltaSC.y * kPPosDeltaSC.y);
  1607. float fNextLen = sqrtf(kPPosDeltaSN.x * kPPosDeltaSN.x + kPPosDeltaSN.y * kPPosDeltaSN.y);
  1608. float fTotalLen = sqrtf(kPPosDeltaSD.x * kPPosDeltaSD.x + kPPosDeltaSD.y * kPPosDeltaSD.y);
  1609. float fRestLen = fTotalLen - fCurLen;
  1610.  
  1611. if (__IsMainInstance())
  1612. {
  1613. if (m_isGoing && IsWalking())
  1614. {
  1615. float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(NEW_GetSrcPixelPositionRef(), NEW_GetDstPixelPositionRef());
  1616.  
  1617. SetAdvancingRotation(fDstRot);
  1618.  
  1619. if (fRestLen <= 0.0)
  1620. {
  1621. if (IsWalking())
  1622. EndWalking();
  1623.  
  1624. //Tracen("¸ńÇĄ µµ´Ţ Á¤Áö");
  1625.  
  1626. m_isGoing = FALSE;
  1627.  
  1628. BlockMovement();
  1629.  
  1630. if (FUNC_EMOTION == m_kMovAfterFunc.eFunc)
  1631. {
  1632. DWORD dwMotionNumber = m_kMovAfterFunc.uArg;
  1633. DWORD dwTargetVID = m_kMovAfterFunc.uArgExpanded;
  1634. __ProcessFunctionEmotion(dwMotionNumber, dwTargetVID, m_kMovAfterFunc.kPosDst);
  1635. m_kMovAfterFunc.eFunc = FUNC_WAIT;
  1636. return;
  1637. }
  1638. }
  1639. }
  1640. }
  1641. else
  1642. {
  1643. if (m_isGoing && IsWalking())
  1644. {
  1645. float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(NEW_GetSrcPixelPositionRef(), NEW_GetDstPixelPositionRef());
  1646.  
  1647. SetAdvancingRotation(fDstRot);
  1648.  
  1649. // ¸¸ľŕ ·»ĹϽðˇ ´Ęľî łĘą« ¸ąŔĚ Ŕ̵żÇߴٸé..
  1650. if (fRestLen < -100.0f)
  1651. {
  1652. NEW_SetSrcPixelPosition(kPPosCur);
  1653.  
  1654. float fDstRot = NEW_GetAdvancingRotationFromPixelPosition(kPPosCur, NEW_GetDstPixelPositionRef());
  1655. SetAdvancingRotation(fDstRot);
  1656. //Tracenf("VID %d żŔąö ąćÇ⼳Á¤ (%f, %f) %f rest %f", GetVirtualID(), kPPosCur.x, kPPosCur.y, fDstRot, fRestLen);
  1657.  
  1658. // Ŕ̵żÁßŔ̶ó¸é ´ŮŔ˝ąřżˇ ¸ŘĂß°Ô ÇŃ´Ů
  1659. if (FUNC_MOVE == m_kMovAfterFunc.eFunc)
  1660. {
  1661. m_kMovAfterFunc.eFunc = FUNC_WAIT;
  1662. }
  1663. }
  1664. // µµÂřÇߴٸé...
  1665. else if (fCurLen <= fTotalLen && fTotalLen <= fNextLen)
  1666. {
  1667. if (m_GraphicThingInstance.IsDead() || m_GraphicThingInstance.IsKnockDown())
  1668. {
  1669. __DisableSkipCollision();
  1670.  
  1671. //Tracen("»ç¸Á »óĹÂ¶ó µżŔŰ ˝şĹµ");
  1672.  
  1673. m_isGoing = FALSE;
  1674.  
  1675. //Tracen("Çൿ şŇ´É »óŶó ŔĚČÄ µżŔŰ ˝şĹµ");
  1676. }
  1677. else
  1678. {
  1679. switch (m_kMovAfterFunc.eFunc)
  1680. {
  1681. case FUNC_ATTACK:
  1682. {
  1683. if (IsWalking())
  1684. EndWalking();
  1685.  
  1686. __DisableSkipCollision();
  1687. m_isGoing = FALSE;
  1688.  
  1689. BlockMovement();
  1690. SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
  1691. SetAdvancingRotation(m_fDstRot);
  1692. SetRotation(m_fDstRot);
  1693.  
  1694. RunNormalAttack(m_fDstRot);
  1695. break;
  1696. }
  1697.  
  1698. case FUNC_COMBO:
  1699. {
  1700. if (IsWalking())
  1701. EndWalking();
  1702.  
  1703. __DisableSkipCollision();
  1704. m_isGoing = FALSE;
  1705.  
  1706. BlockMovement();
  1707. SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
  1708. RunComboAttack(m_fDstRot, m_kMovAfterFunc.uArg);
  1709. break;
  1710. }
  1711.  
  1712. case FUNC_EMOTION:
  1713. {
  1714. m_isGoing = FALSE;
  1715. m_kMovAfterFunc.eFunc = FUNC_WAIT;
  1716. __DisableSkipCollision();
  1717. BlockMovement();
  1718.  
  1719. DWORD dwMotionNumber = m_kMovAfterFunc.uArg;
  1720. DWORD dwTargetVID = m_kMovAfterFunc.uArgExpanded;
  1721. __ProcessFunctionEmotion(dwMotionNumber, dwTargetVID, m_kMovAfterFunc.kPosDst);
  1722. break;
  1723. }
  1724.  
  1725. case FUNC_MOVE:
  1726. {
  1727. break;
  1728. }
  1729.  
  1730. case FUNC_MOB_SKILL:
  1731. {
  1732. if (IsWalking())
  1733. EndWalking();
  1734.  
  1735. __DisableSkipCollision();
  1736. m_isGoing = FALSE;
  1737.  
  1738. BlockMovement();
  1739. SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
  1740. SetAdvancingRotation(m_fDstRot);
  1741. SetRotation(m_fDstRot);
  1742.  
  1743. m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_SPECIAL_1 + m_kMovAfterFunc.uArg);
  1744. break;
  1745. }
  1746.  
  1747. default:
  1748. {
  1749. if (m_kMovAfterFunc.eFunc & FUNC_SKILL)
  1750. {
  1751. SetAdvancingRotation(m_fDstRot);
  1752. BlendRotation(m_fDstRot);
  1753. NEW_UseSkill(0, m_kMovAfterFunc.eFunc & 0x7f, m_kMovAfterFunc.uArg & 0x0f, (m_kMovAfterFunc.uArg >> 4) ? true : false);
  1754. }
  1755. else
  1756. {
  1757. //Tracenf("VID %d ˝şĹł °ř°Ý (%f, %f) rot %f", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot);
  1758.  
  1759. __DisableSkipCollision();
  1760. m_isGoing = FALSE;
  1761.  
  1762. BlockMovement();
  1763. SCRIPT_SetPixelPosition(NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y);
  1764. SetAdvancingRotation(m_fDstRot);
  1765. BlendRotation(m_fDstRot);
  1766. if (!IsWaiting())
  1767. {
  1768. EndWalking();
  1769. }
  1770.  
  1771. //Tracenf("VID %d Á¤Áö (%f, %f) rot %f IsWalking %d", GetVirtualID(), NEW_GetDstPixelPositionRef().x, NEW_GetDstPixelPositionRef().y, m_fDstRot, IsWalking());
  1772. }
  1773. break;
  1774. }
  1775. }
  1776.  
  1777. }
  1778. }
  1779.  
  1780. }
  1781. }
  1782.  
  1783. if (IsWalking() || m_GraphicThingInstance.IsUsingMovingSkill())
  1784. {
  1785. float fRotation = m_GraphicThingInstance.GetRotation();
  1786. float fAdvancingRotation = m_GraphicThingInstance.GetAdvancingRotation();
  1787. int iDirection = GetRotatingDirection(fRotation, fAdvancingRotation);
  1788.  
  1789. if (DEGREE_DIRECTION_SAME != m_iRotatingDirection)
  1790. {
  1791. if (DEGREE_DIRECTION_LEFT == iDirection)
  1792. {
  1793. fRotation = fmodf(fRotation + m_fRotSpd*m_GraphicThingInstance.GetSecondElapsed(), 360.0f);
  1794. }
  1795. else if (DEGREE_DIRECTION_RIGHT == iDirection)
  1796. {
  1797. fRotation = fmodf(fRotation - m_fRotSpd*m_GraphicThingInstance.GetSecondElapsed() + 360.0f, 360.0f);
  1798. }
  1799.  
  1800. if (m_iRotatingDirection != GetRotatingDirection(fRotation, fAdvancingRotation))
  1801. {
  1802. m_iRotatingDirection = DEGREE_DIRECTION_SAME;
  1803. fRotation = fAdvancingRotation;
  1804. }
  1805.  
  1806. m_GraphicThingInstance.SetRotation(fRotation);
  1807. }
  1808.  
  1809. if (__IsInDustRange())
  1810. {
  1811. float fDustDistance = NEW_GetDistanceFromDestPixelPosition(m_kPPosDust);
  1812. if (IsMountingHorse())
  1813. {
  1814. if (fDustDistance > ms_fHorseDustGap)
  1815. {
  1816. NEW_GetPixelPosition(&m_kPPosDust);
  1817. __AttachEffect(EFFECT_HORSE_DUST);
  1818. }
  1819. }
  1820. else
  1821. {
  1822. if (fDustDistance > ms_fDustGap)
  1823. {
  1824. NEW_GetPixelPosition(&m_kPPosDust);
  1825. __AttachEffect(EFFECT_DUST);
  1826. }
  1827. }
  1828. }
  1829. }
  1830. }
  1831.  
  1832. void CInstanceBase::__ProcessFunctionEmotion(DWORD dwMotionNumber, DWORD dwTargetVID, const TPixelPosition & c_rkPosDst)
  1833. {
  1834. if (IsWalking())
  1835. EndWalkingWithoutBlending();
  1836.  
  1837. __EnableChangingTCPState();
  1838. SCRIPT_SetPixelPosition(c_rkPosDst.x, c_rkPosDst.y);
  1839.  
  1840. CInstanceBase * pTargetInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwTargetVID);
  1841. if (pTargetInstance)
  1842. {
  1843. pTargetInstance->__EnableChangingTCPState();
  1844.  
  1845. if (pTargetInstance->IsWalking())
  1846. pTargetInstance->EndWalkingWithoutBlending();
  1847.  
  1848. WORD wMotionNumber1 = HIWORD(dwMotionNumber);
  1849. WORD wMotionNumber2 = LOWORD(dwMotionNumber);
  1850.  
  1851. int src_job = RaceToJob(GetRace());
  1852. int dst_job = RaceToJob(pTargetInstance->GetRace());
  1853.  
  1854. NEW_LookAtDestInstance(*pTargetInstance);
  1855. m_GraphicThingInstance.InterceptOnceMotion(wMotionNumber1 + dst_job);
  1856. m_GraphicThingInstance.SetRotation(m_GraphicThingInstance.GetTargetRotation());
  1857. m_GraphicThingInstance.SetAdvancingRotation(m_GraphicThingInstance.GetTargetRotation());
  1858.  
  1859. pTargetInstance->NEW_LookAtDestInstance(*this);
  1860. pTargetInstance->m_GraphicThingInstance.InterceptOnceMotion(wMotionNumber2 + src_job);
  1861. pTargetInstance->m_GraphicThingInstance.SetRotation(pTargetInstance->m_GraphicThingInstance.GetTargetRotation());
  1862. pTargetInstance->m_GraphicThingInstance.SetAdvancingRotation(pTargetInstance->m_GraphicThingInstance.GetTargetRotation());
  1863.  
  1864. if (pTargetInstance->__IsMainInstance())
  1865. {
  1866. IAbstractPlayer & rPlayer = IAbstractPlayer::GetSingleton();
  1867. rPlayer.EndEmotionProcess();
  1868. }
  1869. }
  1870.  
  1871. if (__IsMainInstance())
  1872. {
  1873. IAbstractPlayer & rPlayer = IAbstractPlayer::GetSingleton();
  1874. rPlayer.EndEmotionProcess();
  1875. }
  1876. }
  1877.  
  1878. ///////////////////////////////////////////////////////////////////////////////////////////////////
  1879. // Update & Deform & Render
  1880.  
  1881. int g_iAccumulationTime = 0;
  1882.  
  1883. void CInstanceBase::Update()
  1884. {
  1885. ++ms_dwUpdateCounter;
  1886.  
  1887. StateProcess();
  1888. m_GraphicThingInstance.PhysicsProcess();
  1889. m_GraphicThingInstance.RotationProcess();
  1890. m_GraphicThingInstance.ComboProcess();
  1891. m_GraphicThingInstance.AccumulationMovement();
  1892.  
  1893. if (m_GraphicThingInstance.IsMovement())
  1894. {
  1895. TPixelPosition kPPosCur;
  1896. NEW_GetPixelPosition(&kPPosCur);
  1897.  
  1898. DWORD dwCurTime = ELTimer_GetFrameMSec();
  1899. //if (m_dwNextUpdateHeightTime<dwCurTime)
  1900. {
  1901. m_dwNextUpdateHeightTime = dwCurTime;
  1902. kPPosCur.z = __GetBackgroundHeight(kPPosCur.x, kPPosCur.y);
  1903. NEW_SetPixelPosition(kPPosCur);
  1904. }
  1905.  
  1906. // SetMaterialColor
  1907. {
  1908. DWORD dwMtrlColor = __GetShadowMapColor(kPPosCur.x, kPPosCur.y);
  1909. m_GraphicThingInstance.SetMaterialColor(dwMtrlColor);
  1910. }
  1911. }
  1912.  
  1913. m_GraphicThingInstance.UpdateAdvancingPointInstance();
  1914.  
  1915. AttackProcess();
  1916. MovementProcess();
  1917.  
  1918. m_GraphicThingInstance.MotionProcess(IsPC());
  1919. if (IsMountingHorse())
  1920. {
  1921. m_kHorse.m_pkActor->HORSE_MotionProcess(FALSE);
  1922. }
  1923.  
  1924. __ComboProcess();
  1925.  
  1926. ProcessDamage();
  1927.  
  1928. }
  1929.  
  1930. void CInstanceBase::Transform()
  1931. {
  1932. if (__IsSyncing())
  1933. {
  1934. //OnSyncing();
  1935. }
  1936. else
  1937. {
  1938. if (IsWalking() || m_GraphicThingInstance.IsUsingMovingSkill())
  1939. {
  1940. const D3DXVECTOR3& c_rv3Movment = m_GraphicThingInstance.GetMovementVectorRef();
  1941.  
  1942. float len = (c_rv3Movment.x*c_rv3Movment.x) + (c_rv3Movment.y*c_rv3Movment.y);
  1943. if (len>1.0f)
  1944. OnMoving();
  1945. else
  1946. OnWaiting();
  1947. }
  1948. }
  1949.  
  1950. m_GraphicThingInstance.INSTANCEBASE_Transform();
  1951. }
  1952.  
  1953.  
  1954. void CInstanceBase::Deform()
  1955. {
  1956. // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î şŻ°ć
  1957. if (!__CanRender())
  1958. return;
  1959.  
  1960. ++ms_dwDeformCounter;
  1961.  
  1962. m_GraphicThingInstance.INSTANCEBASE_Deform();
  1963.  
  1964. m_kHorse.Deform();
  1965. }
  1966.  
  1967. void CInstanceBase::RenderTrace()
  1968. {
  1969. if (!__CanRender())
  1970. return;
  1971.  
  1972. m_GraphicThingInstance.RenderTrace();
  1973. }
  1974.  
  1975.  
  1976.  
  1977.  
  1978. void CInstanceBase::Render()
  1979. {
  1980. // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î şŻ°ć
  1981. if (!__CanRender())
  1982. return;
  1983.  
  1984. ++ms_dwRenderCounter;
  1985.  
  1986. m_kHorse.Render();
  1987. m_GraphicThingInstance.Render();
  1988.  
  1989. if (CActorInstance::IsDirLine())
  1990. {
  1991. if (NEW_GetDstPixelPositionRef().x != 0.0f)
  1992. {
  1993. static CScreen s_kScreen;
  1994.  
  1995. STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
  1996. STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
  1997. STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
  1998. STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, FALSE);
  1999. STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
  2000. STATEMANAGER.SetRenderState(D3DRS_LIGHTING, FALSE);
  2001.  
  2002. TPixelPosition px;
  2003. m_GraphicThingInstance.GetPixelPosition(&px);
  2004. D3DXVECTOR3 kD3DVt3Cur(px.x, px.y, px.z);
  2005. //D3DXVECTOR3 kD3DVt3Cur(NEW_GetSrcPixelPositionRef().x, -NEW_GetSrcPixelPositionRef().y, NEW_GetSrcPixelPositionRef().z);
  2006. D3DXVECTOR3 kD3DVt3Dest(NEW_GetDstPixelPositionRef().x, -NEW_GetDstPixelPositionRef().y, NEW_GetDstPixelPositionRef().z);
  2007.  
  2008. //printf("%s %f\n", GetNameString(), kD3DVt3Cur.y - kD3DVt3Dest.y);
  2009. //float fdx = NEW_GetDstPixelPositionRef().x - NEW_GetSrcPixelPositionRef().x;
  2010. //float fdy = NEW_GetDstPixelPositionRef().y - NEW_GetSrcPixelPositionRef().y;
  2011.  
  2012. s_kScreen.SetDiffuseColor(0.0f, 0.0f, 1.0f);
  2013. s_kScreen.RenderLine3d(kD3DVt3Cur.x, kD3DVt3Cur.y, px.z, kD3DVt3Dest.x, kD3DVt3Dest.y, px.z);
  2014. STATEMANAGER.RestoreRenderState(D3DRS_ZENABLE);
  2015. STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, TRUE);
  2016. STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE);
  2017. }
  2018. }
  2019. }
  2020.  
  2021. void CInstanceBase::RenderToShadowMap()
  2022. {
  2023. if (IsDoor())
  2024. return;
  2025.  
  2026. if (IsBuilding())
  2027. return;
  2028.  
  2029. if (!__CanRender())
  2030. return;
  2031.  
  2032. if (!__IsExistMainInstance())
  2033. return;
  2034.  
  2035. CInstanceBase* pkInstMain = __GetMainInstancePtr();
  2036.  
  2037. const float SHADOW_APPLY_DISTANCE = 2500.0f;
  2038.  
  2039. float fDistance = NEW_GetDistanceFromDestInstance(*pkInstMain);
  2040. if (fDistance >= SHADOW_APPLY_DISTANCE)
  2041. return;
  2042.  
  2043. m_GraphicThingInstance.RenderToShadowMap();
  2044. }
  2045.  
  2046. void CInstanceBase::RenderCollision()
  2047. {
  2048. m_GraphicThingInstance.RenderCollisionData();
  2049. }
  2050.  
  2051. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2052. // Setting & Getting Data
  2053.  
  2054. void CInstanceBase::SetVirtualID(DWORD dwVirtualID)
  2055. {
  2056. m_GraphicThingInstance.SetVirtualID(dwVirtualID);
  2057. }
  2058.  
  2059. void CInstanceBase::SetVirtualNumber(DWORD dwVirtualNumber)
  2060. {
  2061. m_dwVirtualNumber = dwVirtualNumber;
  2062. }
  2063.  
  2064. void CInstanceBase::SetInstanceType(int iInstanceType)
  2065. {
  2066. m_GraphicThingInstance.SetActorType(iInstanceType);
  2067. }
  2068.  
  2069. void CInstanceBase::SetAlignment(short sAlignment)
  2070. {
  2071. m_sAlignment = sAlignment;
  2072. RefreshTextTailTitle();
  2073. }
  2074.  
  2075. #ifdef ENABLE_TITLE_SYSTEM
  2076. void CInstanceBase::SetPrestige(short sPrestige)
  2077. {
  2078. m_sPrestige = sPrestige;
  2079. RefreshTextTailTitle();
  2080. }
  2081. #endif
  2082.  
  2083. void CInstanceBase::SetPKMode(BYTE byPKMode)
  2084. {
  2085. if (m_byPKMode == byPKMode)
  2086. return;
  2087.  
  2088. m_byPKMode = byPKMode;
  2089.  
  2090. if (__IsMainInstance())
  2091. {
  2092. IAbstractPlayer& rPlayer = IAbstractPlayer::GetSingleton();
  2093. rPlayer.NotifyChangePKMode();
  2094. }
  2095. }
  2096.  
  2097. void CInstanceBase::SetKiller(bool bFlag)
  2098. {
  2099. if (m_isKiller == bFlag)
  2100. return;
  2101.  
  2102. m_isKiller = bFlag;
  2103. RefreshTextTail();
  2104. }
  2105.  
  2106. void CInstanceBase::SetPartyMemberFlag(bool bFlag)
  2107. {
  2108. m_isPartyMember = bFlag;
  2109. }
  2110.  
  2111. void CInstanceBase::SetStateFlags(DWORD dwStateFlags)
  2112. {
  2113. if (dwStateFlags & ADD_CHARACTER_STATE_KILLER)
  2114. SetKiller(TRUE);
  2115. else
  2116. SetKiller(FALSE);
  2117.  
  2118. if (dwStateFlags & ADD_CHARACTER_STATE_PARTY)
  2119. SetPartyMemberFlag(TRUE);
  2120. else
  2121. SetPartyMemberFlag(FALSE);
  2122. }
  2123.  
  2124. void CInstanceBase::SetComboType(UINT uComboType)
  2125. {
  2126. m_GraphicThingInstance.SetComboType(uComboType);
  2127. }
  2128.  
  2129. const char * CInstanceBase::GetNameString()
  2130. {
  2131. return m_stName.c_str();
  2132. }
  2133.  
  2134. #ifdef ENABLE_NEW_EXCHANGE_WINDOW
  2135. DWORD CInstanceBase::GetLevel()
  2136. {
  2137. return m_dwLevel;
  2138. }
  2139. #endif
  2140.  
  2141. DWORD CInstanceBase::GetRace()
  2142. {
  2143. return m_dwRace;
  2144. }
  2145.  
  2146.  
  2147. bool CInstanceBase::IsConflictAlignmentInstance(CInstanceBase& rkInstVictim)
  2148. {
  2149. if (PK_MODE_PROTECT == rkInstVictim.GetPKMode())
  2150. return false;
  2151.  
  2152. switch (GetAlignmentType())
  2153. {
  2154. case ALIGNMENT_TYPE_NORMAL:
  2155. case ALIGNMENT_TYPE_WHITE:
  2156. if (ALIGNMENT_TYPE_DARK == rkInstVictim.GetAlignmentType())
  2157. return true;
  2158. break;
  2159. case ALIGNMENT_TYPE_DARK:
  2160. if (GetAlignmentType() != rkInstVictim.GetAlignmentType())
  2161. return true;
  2162. break;
  2163. }
  2164.  
  2165. return false;
  2166. }
  2167.  
  2168. void CInstanceBase::SetDuelMode(DWORD type)
  2169. {
  2170. m_dwDuelMode = type;
  2171. }
  2172.  
  2173. DWORD CInstanceBase::GetDuelMode()
  2174. {
  2175. return m_dwDuelMode;
  2176. }
  2177.  
  2178. bool CInstanceBase::IsAttackableInstance(CInstanceBase& rkInstVictim)
  2179. {
  2180. if (__IsMainInstance())
  2181. {
  2182. CPythonPlayer& rkPlayer = CPythonPlayer::Instance();
  2183. if (rkPlayer.IsObserverMode())
  2184. return false;
  2185. }
  2186.  
  2187. if (GetVirtualID() == rkInstVictim.GetVirtualID())
  2188. return false;
  2189.  
  2190. if (IsStone())
  2191. {
  2192. if (rkInstVictim.IsPC())
  2193. return true;
  2194. }
  2195. else if (IsPC())
  2196. {
  2197. if (rkInstVictim.IsStone())
  2198. return true;
  2199.  
  2200. if (rkInstVictim.IsPC())
  2201. {
  2202. if (GetDuelMode())
  2203. {
  2204. switch (GetDuelMode())
  2205. {
  2206. case DUEL_CANNOTATTACK:
  2207. return false;
  2208. case DUEL_START:
  2209. if (__FindDUELKey(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2210. return true;
  2211. else
  2212. return false;
  2213. }
  2214. }
  2215. if (PK_MODE_GUILD == GetPKMode())
  2216. if (GetGuildID() == rkInstVictim.GetGuildID())
  2217. return false;
  2218.  
  2219. if (rkInstVictim.IsKiller())
  2220. if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2221. return true;
  2222.  
  2223. if (PK_MODE_PROTECT != GetPKMode())
  2224. {
  2225. if (PK_MODE_FREE == GetPKMode())
  2226. {
  2227. if (PK_MODE_PROTECT != rkInstVictim.GetPKMode())
  2228. if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2229. return true;
  2230. }
  2231. if (PK_MODE_GUILD == GetPKMode())
  2232. {
  2233. if (PK_MODE_PROTECT != rkInstVictim.GetPKMode())
  2234. if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2235. if (GetGuildID() != rkInstVictim.GetGuildID())
  2236. return true;
  2237. }
  2238. }
  2239.  
  2240. if (IsSameEmpire(rkInstVictim))
  2241. {
  2242. if (IsPVPInstance(rkInstVictim))
  2243. return true;
  2244.  
  2245. if (PK_MODE_REVENGE == GetPKMode())
  2246. if (!IAbstractPlayer::GetSingleton().IsSamePartyMember(GetVirtualID(), rkInstVictim.GetVirtualID()))
  2247. if (IsConflictAlignmentInstance(rkInstVictim))
  2248. return true;
  2249. }
  2250. else
  2251. {
  2252. return true;
  2253. }
  2254. }
  2255.  
  2256. if (rkInstVictim.IsEnemy())
  2257. return true;
  2258.  
  2259. if (rkInstVictim.IsWoodenDoor())
  2260. return true;
  2261. }
  2262. else if (IsEnemy())
  2263. {
  2264. if (rkInstVictim.IsPC())
  2265. return true;
  2266.  
  2267. if (rkInstVictim.IsBuilding())
  2268. return true;
  2269.  
  2270. }
  2271. else if (IsPoly())
  2272. {
  2273. if (rkInstVictim.IsPC())
  2274. return true;
  2275.  
  2276. if (rkInstVictim.IsEnemy())
  2277. return true;
  2278. }
  2279. return false;
  2280. }
  2281.  
  2282. bool CInstanceBase::IsTargetableInstance(CInstanceBase& rkInstVictim)
  2283. {
  2284. return rkInstVictim.CanPickInstance();
  2285. }
  2286.  
  2287. // 2004. 07. 07. [levites] - ˝şĹł »çżëÁß Ĺ¸°ŮŔĚ ąŮ˛î´Â ą®Á¦ ÇŘ°áŔ» Ŕ§ÇŃ ÄÚµĺ
  2288. bool CInstanceBase::CanChangeTarget()
  2289. {
  2290. return m_GraphicThingInstance.CanChangeTarget();
  2291. }
  2292.  
  2293. // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î şŻ°ć
  2294. bool CInstanceBase::CanPickInstance()
  2295. {
  2296. if (!__IsInViewFrustum())
  2297. return false;
  2298.  
  2299. if (IsDoor())
  2300. {
  2301. if (IsDead())
  2302. return false;
  2303. }
  2304.  
  2305. if (IsPC())
  2306. {
  2307. if (IsAffect(AFFECT_EUNHYEONG))
  2308. {
  2309. if (!__MainCanSeeHiddenThing())
  2310. return false;
  2311. }
  2312. if (IsAffect(AFFECT_REVIVE_INVISIBILITY))
  2313. return false;
  2314. if (IsAffect(AFFECT_INVISIBILITY))
  2315. return false;
  2316. }
  2317.  
  2318. if (IsDead())
  2319. return false;
  2320.  
  2321. return true;
  2322. }
  2323.  
  2324. bool CInstanceBase::CanViewTargetHP(CInstanceBase& rkInstVictim)
  2325. {
  2326. if (rkInstVictim.IsStone())
  2327. return true;
  2328. if (rkInstVictim.IsWoodenDoor())
  2329. return true;
  2330. if (rkInstVictim.IsEnemy())
  2331. return true;
  2332.  
  2333. return false;
  2334. }
  2335.  
  2336. BOOL CInstanceBase::IsPoly()
  2337. {
  2338. return m_GraphicThingInstance.IsPoly();
  2339. }
  2340.  
  2341. BOOL CInstanceBase::IsPC()
  2342. {
  2343. return m_GraphicThingInstance.IsPC();
  2344. }
  2345.  
  2346. BOOL CInstanceBase::IsNPC()
  2347. {
  2348. return m_GraphicThingInstance.IsNPC();
  2349. }
  2350.  
  2351. BOOL CInstanceBase::IsEnemy()
  2352. {
  2353. return m_GraphicThingInstance.IsEnemy();
  2354. }
  2355.  
  2356. BOOL CInstanceBase::IsStone()
  2357. {
  2358. return m_GraphicThingInstance.IsStone();
  2359. }
  2360.  
  2361.  
  2362. BOOL CInstanceBase::IsGuildWall() //IsBuilding ±ćµĺ°Çą°ŔüĂĽ IsGuildWallŔş ´ăŔĺş®¸¸(ą®Ŕş Á¦żÜ)
  2363. {
  2364. return IsWall(m_dwRace);
  2365. }
  2366.  
  2367.  
  2368. BOOL CInstanceBase::IsResource()
  2369. {
  2370. switch (m_dwVirtualNumber)
  2371. {
  2372. case 20047:
  2373. case 20048:
  2374. case 20049:
  2375. case 20050:
  2376. case 20051:
  2377. case 20052:
  2378. case 20053:
  2379. case 20054:
  2380. case 20055:
  2381. case 20056:
  2382. case 20057:
  2383. case 20058:
  2384. case 20059:
  2385. case 30301:
  2386. case 30302:
  2387. case 30303:
  2388. case 30304:
  2389. case 30305:
  2390. return TRUE;
  2391. }
  2392.  
  2393. return FALSE;
  2394. }
  2395.  
  2396. BOOL CInstanceBase::IsWarp()
  2397. {
  2398. return m_GraphicThingInstance.IsWarp();
  2399. }
  2400.  
  2401. BOOL CInstanceBase::IsGoto()
  2402. {
  2403. return m_GraphicThingInstance.IsGoto();
  2404. }
  2405.  
  2406. BOOL CInstanceBase::IsObject()
  2407. {
  2408. return m_GraphicThingInstance.IsObject();
  2409. }
  2410.  
  2411. BOOL CInstanceBase::IsBuilding()
  2412. {
  2413. return m_GraphicThingInstance.IsBuilding();
  2414. }
  2415.  
  2416. BOOL CInstanceBase::IsDoor()
  2417. {
  2418. return m_GraphicThingInstance.IsDoor();
  2419. }
  2420.  
  2421. BOOL CInstanceBase::IsWoodenDoor()
  2422. {
  2423. if (m_GraphicThingInstance.IsDoor())
  2424. {
  2425. int vnum = GetVirtualNumber();
  2426. if (vnum == 13000) // łŞą«ą®
  2427. return true;
  2428. else if (vnum >= 30111 && vnum <= 30119) // »ç±Íą®
  2429. return true;
  2430. else
  2431. return false;
  2432. }
  2433. else
  2434. {
  2435. return false;
  2436. }
  2437. }
  2438.  
  2439. BOOL CInstanceBase::IsStoneDoor()
  2440. {
  2441. return m_GraphicThingInstance.IsDoor() && 13001 == GetVirtualNumber();
  2442. }
  2443.  
  2444. BOOL CInstanceBase::IsFlag()
  2445. {
  2446. if (GetRace() == 20035)
  2447. return TRUE;
  2448. if (GetRace() == 20036)
  2449. return TRUE;
  2450. if (GetRace() == 20037)
  2451. return TRUE;
  2452.  
  2453. return FALSE;
  2454. }
  2455.  
  2456. BOOL CInstanceBase::IsForceVisible()
  2457. {
  2458. if (IsAffect(AFFECT_SHOW_ALWAYS))
  2459. return TRUE;
  2460.  
  2461. if (IsObject() || IsBuilding() || IsDoor())
  2462. return TRUE;
  2463.  
  2464. return FALSE;
  2465. }
  2466.  
  2467. int CInstanceBase::GetInstanceType()
  2468. {
  2469. return m_GraphicThingInstance.GetActorType();
  2470. }
  2471.  
  2472. DWORD CInstanceBase::GetVirtualID()
  2473. {
  2474. return m_GraphicThingInstance.GetVirtualID();
  2475. }
  2476.  
  2477. DWORD CInstanceBase::GetVirtualNumber()
  2478. {
  2479. return m_dwVirtualNumber;
  2480. }
  2481.  
  2482. // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î şŻ°ć
  2483. bool CInstanceBase::__IsInViewFrustum()
  2484. {
  2485. return m_GraphicThingInstance.isShow();
  2486. }
  2487.  
  2488. bool CInstanceBase::__CanRender()
  2489. {
  2490. if (!__IsInViewFrustum())
  2491. return false;
  2492. if (IsAffect(AFFECT_INVISIBILITY))
  2493. return false;
  2494.  
  2495. return true;
  2496. }
  2497.  
  2498.  
  2499. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2500. // Graphic Control
  2501.  
  2502. bool CInstanceBase::IntersectBoundingBox()
  2503. {
  2504. float u, v, t;
  2505. return m_GraphicThingInstance.Intersect(&u, &v, &t);
  2506. }
  2507.  
  2508. bool CInstanceBase::IntersectDefendingSphere()
  2509. {
  2510. return m_GraphicThingInstance.IntersectDefendingSphere();
  2511. }
  2512.  
  2513. float CInstanceBase::GetDistance(CInstanceBase * pkTargetInst)
  2514. {
  2515. TPixelPosition TargetPixelPosition;
  2516. pkTargetInst->m_GraphicThingInstance.GetPixelPosition(&TargetPixelPosition);
  2517. return GetDistance(TargetPixelPosition);
  2518. }
  2519.  
  2520. float CInstanceBase::GetDistance(const TPixelPosition & c_rPixelPosition)
  2521. {
  2522. TPixelPosition PixelPosition;
  2523. m_GraphicThingInstance.GetPixelPosition(&PixelPosition);
  2524.  
  2525. float fdx = PixelPosition.x - c_rPixelPosition.x;
  2526. float fdy = PixelPosition.y - c_rPixelPosition.y;
  2527.  
  2528. return sqrtf((fdx*fdx) + (fdy*fdy));
  2529. }
  2530.  
  2531. CActorInstance& CInstanceBase::GetGraphicThingInstanceRef()
  2532. {
  2533. return m_GraphicThingInstance;
  2534. }
  2535.  
  2536. CActorInstance* CInstanceBase::GetGraphicThingInstancePtr()
  2537. {
  2538. return &m_GraphicThingInstance;
  2539. }
  2540.  
  2541. void CInstanceBase::RefreshActorInstance()
  2542. {
  2543. m_GraphicThingInstance.RefreshActorInstance();
  2544. }
  2545.  
  2546. void CInstanceBase::Refresh(DWORD dwMotIndex, bool isLoop)
  2547. {
  2548. RefreshState(dwMotIndex, isLoop);
  2549. }
  2550.  
  2551. void CInstanceBase::RestoreRenderMode()
  2552. {
  2553. m_GraphicThingInstance.RestoreRenderMode();
  2554. }
  2555.  
  2556. void CInstanceBase::SetAddRenderMode()
  2557. {
  2558. m_GraphicThingInstance.SetAddRenderMode();
  2559. }
  2560.  
  2561. void CInstanceBase::SetModulateRenderMode()
  2562. {
  2563. m_GraphicThingInstance.SetModulateRenderMode();
  2564. }
  2565.  
  2566. void CInstanceBase::SetRenderMode(int iRenderMode)
  2567. {
  2568. m_GraphicThingInstance.SetRenderMode(iRenderMode);
  2569. }
  2570.  
  2571. void CInstanceBase::SetAddColor(const D3DXCOLOR & c_rColor)
  2572. {
  2573. m_GraphicThingInstance.SetAddColor(c_rColor);
  2574. }
  2575.  
  2576. void CInstanceBase::__SetBlendRenderingMode()
  2577. {
  2578. m_GraphicThingInstance.SetBlendRenderMode();
  2579. }
  2580.  
  2581. void CInstanceBase::__SetAlphaValue(float fAlpha)
  2582. {
  2583. m_GraphicThingInstance.SetAlphaValue(fAlpha);
  2584. }
  2585.  
  2586. float CInstanceBase::__GetAlphaValue()
  2587. {
  2588. return m_GraphicThingInstance.GetAlphaValue();
  2589. }
  2590.  
  2591. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2592. // Part
  2593.  
  2594. void CInstanceBase::SetHair(DWORD eHair)
  2595. {
  2596. if (!HAIR_COLOR_ENABLE)
  2597. return;
  2598.  
  2599. if (IsPC() == false)
  2600. return;
  2601. m_awPart[CRaceData::PART_HAIR] = eHair;
  2602. m_GraphicThingInstance.SetHair(eHair);
  2603. }
  2604.  
  2605. void CInstanceBase::ChangeHair(DWORD eHair)
  2606. {
  2607. if (!HAIR_COLOR_ENABLE)
  2608. return;
  2609.  
  2610. if (IsPC() == false)
  2611. return;
  2612.  
  2613. if (GetPart(CRaceData::PART_HAIR) == eHair)
  2614. return;
  2615.  
  2616. SetHair(eHair);
  2617.  
  2618. //int type = m_GraphicThingInstance.GetMotionMode();
  2619.  
  2620. RefreshState(CRaceMotionData::NAME_WAIT, true);
  2621. //RefreshState(type, true);
  2622. }
  2623.  
  2624. void CInstanceBase::SetAcce(DWORD eAcce)
  2625. {
  2626. if (IsPC() == false || IsPoly())
  2627. return;
  2628.  
  2629. // if (IsPoly())
  2630. // eAcce = 0;
  2631.  
  2632. m_awPart[CRaceData::PART_ACCE] = eAcce;
  2633. m_GraphicThingInstance.SetAcce(eAcce);
  2634. }
  2635.  
  2636. void CInstanceBase::ChangeAcce(DWORD eAcce)
  2637. {
  2638. if (IsPC() == false)
  2639. return;
  2640.  
  2641. if (eAcce == 85000)
  2642. eAcce = 0;
  2643.  
  2644. if (m_awPart[CRaceData::PART_ACCE] == eAcce)
  2645. return;
  2646.  
  2647. SetAcce(eAcce);
  2648. RefreshState(CRaceMotionData::NAME_WAIT, true);
  2649. }
  2650.  
  2651. void CInstanceBase::SetArmor(DWORD dwArmor)
  2652. {
  2653. DWORD dwShape;
  2654. if (__ArmorVnumToShape(dwArmor, &dwShape))
  2655. {
  2656. CItemData * pItemData;
  2657. if (CItemManager::Instance().GetItemDataPointer(dwArmor, &pItemData))
  2658. {
  2659. float fSpecularPower = pItemData->GetSpecularPowerf();
  2660. SetShape(dwShape, fSpecularPower);
  2661. __GetRefinedEffect(pItemData);
  2662. return;
  2663. }
  2664. else
  2665. __ClearArmorRefineEffect();
  2666. }
  2667.  
  2668. SetShape(dwArmor);
  2669. }
  2670.  
  2671. void CInstanceBase::SetShape(DWORD eShape, float fSpecular)
  2672. {
  2673. if (IsPoly())
  2674. {
  2675. m_GraphicThingInstance.SetShape(0);
  2676. }
  2677. else
  2678. {
  2679. m_GraphicThingInstance.SetShape(eShape, fSpecular);
  2680. }
  2681.  
  2682. m_eShape = eShape;
  2683. }
  2684.  
  2685.  
  2686.  
  2687. DWORD CInstanceBase::GetWeaponType()
  2688. {
  2689. DWORD dwWeapon = GetPart(CRaceData::PART_WEAPON);
  2690. CItemData * pItemData;
  2691. if (!CItemManager::Instance().GetItemDataPointer(dwWeapon, &pItemData))
  2692. return CItemData::WEAPON_NONE;
  2693. #ifdef ENABLE_COSTUME_WEAPON
  2694. if (pItemData->GetType() == CItemData::ITEM_TYPE_COSTUME)
  2695. return pItemData->GetWeaponType() - CItemData::COSTUME_WEAPON_SWORD;
  2696. #endif
  2697. return pItemData->GetWeaponType();
  2698. }
  2699.  
  2700. /*
  2701. void CInstanceBase::SetParts(const WORD * c_pParts)
  2702. {
  2703. if (IsPoly())
  2704. return;
  2705.  
  2706. if (__IsShapeAnimalWear())
  2707. return;
  2708.  
  2709. UINT eWeapon=c_pParts[CRaceData::PART_WEAPON];
  2710.  
  2711. if (__IsChangableWeapon(eWeapon) == false)
  2712. eWeapon = 0;
  2713.  
  2714. if (eWeapon != m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))
  2715. {
  2716. m_GraphicThingInstance.AttachPart(CRaceData::PART_MAIN, CRaceData::PART_WEAPON, eWeapon);
  2717. m_awPart[CRaceData::PART_WEAPON] = eWeapon;
  2718. }
  2719.  
  2720. __AttachHorseSaddle();
  2721. }
  2722. */
  2723.  
  2724. void CInstanceBase::__ClearWeaponRefineEffect()
  2725. {
  2726. if (m_swordRefineEffectRight)
  2727. {
  2728. __DetachEffect(m_swordRefineEffectRight);
  2729. m_swordRefineEffectRight = 0;
  2730. }
  2731. if (m_swordRefineEffectLeft)
  2732. {
  2733. __DetachEffect(m_swordRefineEffectLeft);
  2734. m_swordRefineEffectLeft = 0;
  2735. }
  2736. if (m_specialEffectR != 0)
  2737. {
  2738. __DetachEffect(m_specialEffectR);
  2739. m_specialEffectR = 0;
  2740. }
  2741. if (m_specialEffectL != 0)
  2742. {
  2743. __DetachEffect(m_specialEffectL);
  2744. m_specialEffectL = 0;
  2745. }
  2746. }
  2747.  
  2748. void CInstanceBase::__ClearArmorRefineEffect()
  2749. {
  2750. if (m_armorRefineEffect)
  2751. {
  2752. __DetachEffect(m_armorRefineEffect);
  2753. m_armorRefineEffect = 0;
  2754. }
  2755. }
  2756.  
  2757. UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
  2758. {
  2759. if (pItem->GetType() == CItemData::ITEM_TYPE_COSTUME)
  2760. {
  2761. DWORD special_weapons[][3] = {
  2762. { 41030, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 1, 0 }, // jednoreka woj
  2763. { 41031, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 2, 0 }, // jednoreka sura
  2764. { 41032, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 4, 0 }, // dwureka
  2765. { 41033, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 5, 0 }, // dzwon
  2766. { 41034, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 8, 0 }, // wachlarz
  2767. { 41035, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 3, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 6 }, // sztylet
  2768. { 41036, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 7, 0 }, // luk
  2769.  
  2770. { 45030, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 11, 0 }, // jednoreka woj
  2771. { 45031, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 12, 0 }, // jednoreka sura
  2772. { 45032, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 14, 0 }, // dwureka
  2773. { 45033, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 15, 0 }, // dzwon
  2774. { 45034, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 18, 0 }, // wachlarz
  2775. { 45035, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 13, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 16 }, // sztylet
  2776. { 45036, EFFECT_REFINED + EFFECT_SPECIAL_WEAPON_START + 17, 0 }, // luk
  2777. };
  2778.  
  2779. for (int i = 0; i < sizeof(special_weapons) / sizeof(special_weapons[0]); i++)
  2780. {
  2781. if (special_weapons[i][0] == pItem->GetIndex())
  2782. {
  2783. __ClearWeaponRefineEffect();
  2784. m_specialEffectR = __AttachEffect(special_weapons[i][1]);
  2785. if (special_weapons[i][2] != 0)
  2786. m_specialEffectL = __AttachEffect(special_weapons[i][2]);
  2787. TraceError("Zakladam skin %d", pItem->GetIndex());
  2788. return 0;
  2789. }
  2790. }
  2791. TraceError("%d to nie skin, usuwam starego skinka", pItem->GetIndex());
  2792. __ClearWeaponRefineEffect();
  2793. }
  2794. DWORD refine = max(pItem->GetRefine() + pItem->GetSocketCount(), CItemData::ITEM_SOCKET_MAX_NUM) - CItemData::ITEM_SOCKET_MAX_NUM;
  2795. switch (pItem->GetType())
  2796. {
  2797. case CItemData::ITEM_TYPE_WEAPON:
  2798. __ClearWeaponRefineEffect();
  2799.  
  2800. if (refine < 7)
  2801. return 0;
  2802. switch (pItem->GetSubType())
  2803. {
  2804. #ifdef ENABLE_COSTUME_WEAPON
  2805. case CItemData::COSTUME_WEAPON_DAGGER:
  2806. #endif
  2807. case CItemData::WEAPON_DAGGER:
  2808. m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SMALLSWORD_REFINED7 + refine - 7;
  2809. m_swordRefineEffectLeft = EFFECT_REFINED + EFFECT_SMALLSWORD_REFINED7_LEFT + refine - 7;
  2810. break;
  2811. #ifdef ENABLE_COSTUME_WEAPON
  2812. case CItemData::COSTUME_WEAPON_FAN:
  2813. #endif
  2814. case CItemData::WEAPON_FAN:
  2815. m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_FANBELL_REFINED7 + refine - 7;
  2816. break;
  2817. #ifdef ENABLE_COSTUME_WEAPON
  2818. case CItemData::COSTUME_WEAPON_BELL:
  2819. #endif
  2820. case CItemData::WEAPON_ARROW:
  2821. case CItemData::WEAPON_BELL:
  2822. m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SMALLSWORD_REFINED7 + refine - 7;
  2823. break;
  2824. #ifdef ENABLE_COSTUME_WEAPON
  2825. case CItemData::COSTUME_WEAPON_BOW:
  2826. #endif
  2827. case CItemData::WEAPON_BOW:
  2828. m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_BOW_REFINED7 + refine - 7;
  2829. break;
  2830. default:
  2831. m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SWORD_REFINED7 + refine - 7;
  2832. }
  2833. if (m_swordRefineEffectRight)
  2834. m_swordRefineEffectRight = __AttachEffect(m_swordRefineEffectRight);
  2835. if (m_swordRefineEffectLeft)
  2836. m_swordRefineEffectLeft = __AttachEffect(m_swordRefineEffectLeft);
  2837. break;
  2838. case CItemData::ITEM_TYPE_ARMOR:
  2839. __ClearArmorRefineEffect();
  2840.  
  2841. // °©żĘ ĆŻČ­ ŔĚĆĺĆ®
  2842. if (pItem->GetSubType() == CItemData::ARMOR_BODY)
  2843. {
  2844. DWORD vnum = pItem->GetIndex();
  2845. // Niebieski // refine + 20
  2846. if (42000 == vnum | 42001 == vnum | 42002 == vnum | 42003 == vnum | 42004 == vnum | 42005 == vnum | 42006 == vnum | 42007 == vnum | 42008 == vnum | 42009 == vnum | 42100 == vnum | 42101 == vnum | 42102 == vnum | 42103 == vnum | 42104 == vnum | 42105 == vnum | 42106 == vnum | 42107 == vnum | 42108 == vnum | 42109 == vnum | 42200 == vnum | 42201 == vnum | 42202 == vnum | 42203 == vnum | 42204 == vnum | 42205 == vnum | 42206 == vnum | 42207 == vnum | 42208 == vnum | 42209 == vnum | 42300 == vnum | 42301 == vnum | 42302 == vnum | 42303 == vnum | 42304 == vnum | 42305 == vnum | 42306 == vnum | 42307 == vnum | 42308 == vnum | 42309 == vnum | 42020 == vnum | 42021 == vnum | 42022 == vnum | 42023 == vnum | 42024 == vnum | 42025 == vnum | 42026 == vnum | 42027 == vnum | 42028 == vnum | 42029 == vnum | 42120 == vnum | 42121 == vnum | 42122 == vnum | 42123 == vnum | 42124 == vnum | 42125 == vnum | 42126 == vnum | 42127 == vnum | 42128 == vnum | 42129 == vnum | 42220 == vnum | 42221 == vnum | 42222 == vnum | 42223 == vnum | 42224 == vnum | 42225 == vnum | 42226 == vnum | 42227 == vnum | 42228 == vnum | 42229 == vnum | 42320 == vnum | 42321 == vnum | 42322 == vnum | 42323 == vnum | 42324 == vnum | 42325 == vnum | 42326 == vnum | 42327 == vnum | 42328 == vnum | 42329 == vnum | 42040 == vnum | 42041 == vnum | 42042 == vnum | 42043 == vnum | 42044 == vnum | 42045 == vnum | 42046 == vnum | 42047 == vnum | 42048 == vnum | 42049 == vnum | 42140 == vnum | 42141 == vnum | 42142 == vnum | 42143 == vnum | 42144 == vnum | 42145 == vnum | 42146 == vnum | 42147 == vnum | 42148 == vnum | 42149 == vnum | 42240 == vnum | 42241 == vnum | 42242 == vnum | 42243 == vnum | 42244 == vnum | 42245 == vnum | 42246 == vnum | 42247 == vnum | 42248 == vnum | 42249 == vnum | 42340 == vnum | 42341 == vnum | 42342 == vnum | 42343 == vnum | 42344 == vnum | 42345 == vnum | 42346 == vnum | 42347 == vnum | 42348 == vnum | 42349 == vnum)
  2847. {
  2848. __AttachEffect(EFFECT_REFINED + EFFECT_BODYARMOR_SPECIAL2);
  2849. }
  2850.  
  2851. // Efekty świecenia zbroii
  2852. // Szary
  2853. if (42030 == vnum | 42031 == vnum | 42032 == vnum | 42033 == vnum | 42034 == vnum | 42035 == vnum | 42036 == vnum | 42037 == vnum | 42038 == vnum | 42039 == vnum | 42130 == vnum | 42131 == vnum | 42132 == vnum | 42133 == vnum | 42134 == vnum | 42135 == vnum | 42136 == vnum | 42137 == vnum | 42138 == vnum | 42139 == vnum | 42230 == vnum | 42231 == vnum | 42232 == vnum | 42233 == vnum | 42234 == vnum | 42235 == vnum | 42236 == vnum | 42237 == vnum | 42238 == vnum | 42239 == vnum | 42330 == vnum | 42331 == vnum | 42332 == vnum | 42333 == vnum | 42334 == vnum | 42335 == vnum | 42336 == vnum | 42337 == vnum | 42338 == vnum | 42339 == vnum | 42060 == vnum | 42061 == vnum | 42062 == vnum | 42063 == vnum | 42064 == vnum | 42065 == vnum | 42066 == vnum | 42067 == vnum | 42068 == vnum | 42069 == vnum | 42160 == vnum | 42161 == vnum | 42162 == vnum | 42163 == vnum | 42164 == vnum | 42165 == vnum | 42166 == vnum | 42167 == vnum | 42168 == vnum | 42169 == vnum | 42260 == vnum | 42261 == vnum | 42262 == vnum | 42263 == vnum | 42264 == vnum | 42265 == vnum | 42266 == vnum | 42267 == vnum | 42268 == vnum | 42269 == vnum | 42360 == vnum | 42361 == vnum | 42362 == vnum | 42363 == vnum | 42364 == vnum | 42365 == vnum | 42366 == vnum | 42367 == vnum | 42368 == vnum | 42369 == vnum)
  2854. {
  2855. __AttachEffect(EFFECT_REFINED + EFFECT_BODYARMOR_SPECIAL3);
  2856. }
  2857. // Czerwony
  2858. if (42050 == vnum | 42051 == vnum | 42052 == vnum | 42053 == vnum | 42054 == vnum | 42055 == vnum | 42056 == vnum | 42057 == vnum | 42058 == vnum | 42059 == vnum | 42150 == vnum | 42151 == vnum | 42152 == vnum | 42153 == vnum | 42154 == vnum | 42155 == vnum | 42156 == vnum | 42157 == vnum | 42158 == vnum | 42159 == vnum | 42250 == vnum | 42251 == vnum | 42252 == vnum | 42253 == vnum | 42254 == vnum | 42255 == vnum | 42256 == vnum | 42257 == vnum | 42258 == vnum | 42259 == vnum | 42350 == vnum | 42351 == vnum | 42352 == vnum | 42353 == vnum | 42354 == vnum | 42355 == vnum | 42356 == vnum | 42357 == vnum | 42358 == vnum | 42359 == vnum)
  2859. {
  2860. __AttachEffect(EFFECT_REFINED + EFFECT_BODYARMOR_SPECIAL4);
  2861. }
  2862. // Różowy
  2863. if (42002 == vnum | 42102 == vnum | 42202 == vnum | 42302 == vnum | 42006 == vnum | 42106 == vnum | 42206 == vnum | 42306 == vnum)
  2864. {
  2865. __AttachEffect(EFFECT_REFINED + EFFECT_BODYARMOR_SPECIAL5);
  2866. }
  2867. // Żółty
  2868. if (42010 == vnum | 42011 == vnum | 42012 == vnum | 42013 == vnum | 42014 == vnum | 42015 == vnum | 42016 == vnum | 42017 == vnum | 42018 == vnum | 42019 == vnum | 42110 == vnum | 42111 == vnum | 42112 == vnum | 42113 == vnum | 42114 == vnum | 42115 == vnum | 42116 == vnum | 42117 == vnum | 42118 == vnum | 42119 == vnum | 42210 == vnum | 42211 == vnum | 42212 == vnum | 42213 == vnum | 42214 == vnum | 42215 == vnum | 42216 == vnum | 42217 == vnum | 42218 == vnum | 42219 == vnum | 42310 == vnum | 42311 == vnum | 42312 == vnum | 42313 == vnum | 42314 == vnum | 42315 == vnum | 42316 == vnum | 42317 == vnum | 42318 == vnum | 42319 == vnum)
  2869. {
  2870. __AttachEffect(EFFECT_REFINED + EFFECT_BODYARMOR_SPECIAL6);
  2871. }
  2872. }
  2873.  
  2874. if (refine < 7) //ÇöŔç Á¦·Ăµµ 7 ŔĚ»ó¸¸ ŔĚĆĺĆ®°ˇ ŔÖ˝Ŕ´Ď´Ů.
  2875. return 0;
  2876.  
  2877. if (pItem->GetSubType() == CItemData::ARMOR_BODY)
  2878. {
  2879. m_armorRefineEffect = EFFECT_REFINED + EFFECT_BODYARMOR_REFINED7 + refine - 7;
  2880. __AttachEffect(m_armorRefineEffect);
  2881. }
  2882. break;
  2883. }
  2884. return 0;
  2885. }
  2886.  
  2887. bool CInstanceBase::SetWeapon(DWORD eWeapon)
  2888. {
  2889. if (IsPoly())
  2890. return false;
  2891.  
  2892. if (__IsShapeAnimalWear())
  2893. return false;
  2894.  
  2895. if (__IsChangableWeapon(eWeapon) == false)
  2896. eWeapon = 0;
  2897.  
  2898. if (m_awPart[CRaceData::PART_WEAPON] == eWeapon && eWeapon == 0)
  2899. return false;
  2900.  
  2901. if (GetVirtualID() == CPythonPlayer::Instance().GetMainCharacterIndex())
  2902. {
  2903. DWORD eWeaponSkin = CPythonPlayer::Instance().GetItemIndex(TItemPos(INVENTORY, c_Costume_Slot_Weapon));
  2904. if (eWeaponSkin != 0 && eWeaponSkin != eWeapon)
  2905. {
  2906. if (m_awPart[CRaceData::PART_WEAPON] == eWeaponSkin && eWeaponSkin == 0)
  2907. return false;
  2908. else
  2909. {
  2910. m_GraphicThingInstance.AttachWeapon(eWeaponSkin);
  2911. m_awPart[CRaceData::PART_WEAPON] = eWeaponSkin;
  2912. TraceError("Zakladam skinowa bron: %d", eWeaponSkin);
  2913. CItemData * pItemData;
  2914. if (CItemManager::Instance().GetItemDataPointer(eWeaponSkin, &pItemData))
  2915. __GetRefinedEffect(pItemData);
  2916. else
  2917. __ClearWeaponRefineEffect();
  2918.  
  2919. return false;
  2920. }
  2921. }
  2922. }
  2923.  
  2924. m_GraphicThingInstance.AttachWeapon(eWeapon);
  2925. m_awPart[CRaceData::PART_WEAPON] = eWeapon;
  2926. TraceError("Zakladam bron: %d", eWeapon);
  2927.  
  2928. //Weapon Effect
  2929. CItemData * pItemData;
  2930. if (CItemManager::Instance().GetItemDataPointer(eWeapon, &pItemData))
  2931. {
  2932. __GetRefinedEffect(pItemData);
  2933. }
  2934. else
  2935. {
  2936. __ClearWeaponRefineEffect();
  2937. }
  2938.  
  2939. return true;
  2940. }
  2941. /*
  2942. bool CInstanceBase::SetWeapon(DWORD eWeapon, bool venosCwel)
  2943. {
  2944. if (IsPoly())
  2945. return false;
  2946.  
  2947. if (__IsShapeAnimalWear())
  2948. return false;
  2949.  
  2950. if (__IsChangableWeapon(eWeapon) == false)
  2951. eWeapon = 0;
  2952.  
  2953. m_GraphicThingInstance.AttachWeapon(eWeapon);
  2954. m_awPart[CRaceData::PART_WEAPON] = eWeapon;
  2955. #ifdef ENABLE_COSTUME_WEAPON_REFFECT
  2956. eWeapon = CPythonPlayer::Instance().GetItemIndex(TItemPos(INVENTORY, c_Costume_Slot_Weapon));
  2957. #endif
  2958. //Weapon Effect
  2959. CItemData * pItemData;
  2960. if (CItemManager::Instance().GetItemDataPointer(eWeapon, &pItemData))
  2961. {
  2962. __GetRefinedEffect(pItemData);
  2963. }
  2964. else
  2965. {
  2966. __ClearWeaponRefineEffect();
  2967. }
  2968. return true;
  2969. }
  2970. */
  2971. void CInstanceBase::ChangeWeapon(DWORD eWeapon)
  2972. {
  2973. if (eWeapon == m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON))
  2974. return;
  2975.  
  2976. if (SetWeapon(eWeapon))
  2977. RefreshState(CRaceMotionData::NAME_WAIT, true);
  2978. }
  2979.  
  2980. bool CInstanceBase::ChangeArmor(DWORD dwArmor)
  2981. {
  2982. DWORD eShape;
  2983. __ArmorVnumToShape(dwArmor, &eShape);
  2984.  
  2985. if (GetShape() == eShape)
  2986. return false;
  2987.  
  2988. CAffectFlagContainer kAffectFlagContainer;
  2989. kAffectFlagContainer.CopyInstance(m_kAffectFlagContainer);
  2990.  
  2991. DWORD dwVID = GetVirtualID();
  2992. DWORD dwRace = GetRace();
  2993. DWORD eHair = GetPart(CRaceData::PART_HAIR);
  2994. DWORD eWeapon = GetPart(CRaceData::PART_WEAPON);
  2995. DWORD eAcce = GetPart(CRaceData::PART_ACCE);
  2996. float fRot = GetRotation();
  2997. float fAdvRot = GetAdvancingRotation();
  2998.  
  2999. if (IsWalking())
  3000. EndWalking();
  3001.  
  3002. // 2004.07.25.myevan.ŔĚĆĺĆ® ľČ şŮ´Â ą®Á¦
  3003. //////////////////////////////////////////////////////
  3004. __ClearAffects();
  3005. //////////////////////////////////////////////////////
  3006.  
  3007. if (!SetRace(dwRace))
  3008. {
  3009. TraceError("CPythonCharacterManager::ChangeArmor - SetRace VID[%d] Race[%d] ERROR", dwVID, dwRace);
  3010. return false;
  3011. }
  3012.  
  3013. SetArmor(dwArmor);
  3014. SetHair(eHair);
  3015. SetWeapon(eWeapon);
  3016. SetAcce(eAcce);
  3017.  
  3018. SetRotation(fRot);
  3019. SetAdvancingRotation(fAdvRot);
  3020.  
  3021. __AttachHorseSaddle();
  3022.  
  3023. RefreshState(CRaceMotionData::NAME_WAIT, TRUE);
  3024.  
  3025. // 2004.07.25.myevan.ŔĚĆĺĆ® ľČ şŮ´Â ą®Á¦
  3026. /////////////////////////////////////////////////
  3027. SetAffectFlagContainer(kAffectFlagContainer);
  3028. /////////////////////////////////////////////////
  3029.  
  3030. CActorInstance::IEventHandler& rkEventHandler = GetEventHandlerRef();
  3031. rkEventHandler.OnChangeShape();
  3032.  
  3033. return true;
  3034. }
  3035.  
  3036. bool CInstanceBase::__IsShapeAnimalWear()
  3037. {
  3038. if (100 == GetShape() ||
  3039. 101 == GetShape() ||
  3040. 102 == GetShape() ||
  3041. 103 == GetShape())
  3042. return true;
  3043.  
  3044. return false;
  3045. }
  3046.  
  3047. DWORD CInstanceBase::__GetRaceType()
  3048. {
  3049. return m_eRaceType;
  3050. }
  3051.  
  3052.  
  3053. void CInstanceBase::RefreshState(DWORD dwMotIndex, bool isLoop)
  3054. {
  3055. DWORD dwPartItemID = m_GraphicThingInstance.GetPartItemID(CRaceData::PART_WEAPON);
  3056.  
  3057. BYTE byItemType = 0xff;
  3058. BYTE bySubType = 0xff;
  3059.  
  3060. CItemManager & rkItemMgr = CItemManager::Instance();
  3061. CItemData * pItemData;
  3062.  
  3063. if (rkItemMgr.GetItemDataPointer(dwPartItemID, &pItemData))
  3064. {
  3065. byItemType = pItemData->GetType();
  3066. bySubType = pItemData->GetWeaponType();
  3067. }
  3068.  
  3069. if (IsPoly())
  3070. {
  3071. SetMotionMode(CRaceMotionData::MODE_GENERAL);
  3072. }
  3073. else if (IsWearingDress())
  3074. {
  3075. SetMotionMode(CRaceMotionData::MODE_WEDDING_DRESS);
  3076. }
  3077. else if (IsHoldingPickAxe())
  3078. {
  3079. if (m_kHorse.IsMounting())
  3080. {
  3081. SetMotionMode(CRaceMotionData::MODE_HORSE);
  3082. }
  3083. else
  3084. {
  3085. SetMotionMode(CRaceMotionData::MODE_GENERAL);
  3086. }
  3087. }
  3088. else if (CItemData::ITEM_TYPE_ROD == byItemType)
  3089. {
  3090. if (m_kHorse.IsMounting())
  3091. {
  3092. SetMotionMode(CRaceMotionData::MODE_HORSE);
  3093. }
  3094. else
  3095. {
  3096. SetMotionMode(CRaceMotionData::MODE_FISHING);
  3097. }
  3098. }
  3099. else if (m_kHorse.IsMounting())
  3100. {
  3101. switch (bySubType)
  3102. {
  3103. #ifdef ENABLE_COSTUME_WEAPON
  3104. case CItemData::COSTUME_WEAPON_SWORD:
  3105. #endif
  3106. case CItemData::WEAPON_SWORD:
  3107. SetMotionMode(CRaceMotionData::MODE_HORSE_ONEHAND_SWORD);
  3108. break;
  3109.  
  3110. #ifdef ENABLE_COSTUME_WEAPON
  3111. case CItemData::COSTUME_WEAPON_TWO_HANDED:
  3112. #endif
  3113. case CItemData::WEAPON_TWO_HANDED:
  3114. SetMotionMode(CRaceMotionData::MODE_HORSE_TWOHAND_SWORD); // Only Warrior
  3115. break;
  3116.  
  3117. #ifdef ENABLE_COSTUME_WEAPON
  3118. case CItemData::COSTUME_WEAPON_DAGGER:
  3119. #endif
  3120. case CItemData::WEAPON_DAGGER:
  3121. SetMotionMode(CRaceMotionData::MODE_HORSE_DUALHAND_SWORD); // Only Assassin
  3122. break;
  3123.  
  3124. #ifdef ENABLE_COSTUME_WEAPON
  3125. case CItemData::COSTUME_WEAPON_FAN:
  3126. #endif
  3127. case CItemData::WEAPON_FAN:
  3128. SetMotionMode(CRaceMotionData::MODE_HORSE_FAN); // Only Shaman
  3129. break;
  3130.  
  3131. #ifdef ENABLE_COSTUME_WEAPON
  3132. case CItemData::COSTUME_WEAPON_BELL:
  3133. #endif
  3134. case CItemData::WEAPON_BELL:
  3135. SetMotionMode(CRaceMotionData::MODE_HORSE_BELL); // Only Shaman
  3136. break;
  3137.  
  3138. #ifdef ENABLE_COSTUME_WEAPON
  3139. case CItemData::COSTUME_WEAPON_BOW:
  3140. #endif
  3141. case CItemData::WEAPON_BOW:
  3142. SetMotionMode(CRaceMotionData::MODE_HORSE_BOW); // Only Shaman
  3143. break;
  3144.  
  3145.  
  3146. default:
  3147. SetMotionMode(CRaceMotionData::MODE_HORSE);
  3148. break;
  3149. }
  3150. }
  3151. else
  3152. {
  3153. switch (bySubType)
  3154. {
  3155. #ifdef ENABLE_COSTUME_WEAPON
  3156. case CItemData::COSTUME_WEAPON_SWORD:
  3157. #endif
  3158. case CItemData::WEAPON_SWORD:
  3159. SetMotionMode(CRaceMotionData::MODE_ONEHAND_SWORD);
  3160. break;
  3161.  
  3162. #ifdef ENABLE_COSTUME_WEAPON
  3163. case CItemData::COSTUME_WEAPON_TWO_HANDED:
  3164. #endif
  3165. case CItemData::WEAPON_TWO_HANDED:
  3166. SetMotionMode(CRaceMotionData::MODE_TWOHAND_SWORD); // Only Warrior
  3167. break;
  3168.  
  3169. #ifdef ENABLE_COSTUME_WEAPON
  3170. case CItemData::COSTUME_WEAPON_DAGGER:
  3171. #endif
  3172. case CItemData::WEAPON_DAGGER:
  3173. SetMotionMode(CRaceMotionData::MODE_DUALHAND_SWORD); // Only Assassin
  3174. break;
  3175.  
  3176.  
  3177. #ifdef ENABLE_COSTUME_WEAPON
  3178. case CItemData::COSTUME_WEAPON_BOW:
  3179. #endif
  3180. case CItemData::WEAPON_BOW:
  3181. SetMotionMode(CRaceMotionData::MODE_BOW); // Only Assassin
  3182. break;
  3183.  
  3184. #ifdef ENABLE_COSTUME_WEAPON
  3185. case CItemData::COSTUME_WEAPON_FAN:
  3186. #endif
  3187. case CItemData::WEAPON_FAN:
  3188. SetMotionMode(CRaceMotionData::MODE_FAN); // Only Shaman
  3189. break;
  3190.  
  3191. #ifdef ENABLE_COSTUME_WEAPON
  3192. case CItemData::COSTUME_WEAPON_BELL:
  3193. #endif
  3194. case CItemData::WEAPON_BELL:
  3195. SetMotionMode(CRaceMotionData::MODE_BELL); // Only Shaman
  3196. break;
  3197.  
  3198. case CItemData::WEAPON_ARROW:
  3199. default:
  3200. SetMotionMode(CRaceMotionData::MODE_GENERAL);
  3201. break;
  3202. }
  3203. }
  3204.  
  3205. if (isLoop)
  3206. m_GraphicThingInstance.InterceptLoopMotion(dwMotIndex);
  3207. else
  3208. m_GraphicThingInstance.InterceptOnceMotion(dwMotIndex);
  3209.  
  3210. RefreshActorInstance();
  3211. }
  3212.  
  3213. ///////////////////////////////////////////////////////////////////////////////////////////////////
  3214. // Device
  3215.  
  3216. void CInstanceBase::RegisterBoundingSphere()
  3217. {
  3218. // Stone ŔĎ °ćżě DeforomNoSkin Ŕ» Çϸé
  3219. // ł«ÇĎÇĎ´Â ľÖ´Ď¸ŢŔĚĽÇ °°Ŕş °ćżě ľÖ´Ď¸ŢŔĚĽÇŔĚ
  3220. // ąŮżîµĺ ąÚ˝şżˇ żµÇâŔ» ąĚĂÄ ÄøµŔĚ Á¦´ë·Î ŔĚ·çľîÁöÁö ľĘ´Â´Ů.
  3221. if (!IsStone())
  3222. {
  3223. m_GraphicThingInstance.DeformNoSkin();
  3224. }
  3225.  
  3226. m_GraphicThingInstance.RegisterBoundingSphere();
  3227. }
  3228.  
  3229. bool CInstanceBase::CreateDeviceObjects()
  3230. {
  3231. return m_GraphicThingInstance.CreateDeviceObjects();
  3232. }
  3233.  
  3234. void CInstanceBase::DestroyDeviceObjects()
  3235. {
  3236. m_GraphicThingInstance.DestroyDeviceObjects();
  3237. }
  3238.  
  3239. void CInstanceBase::Destroy()
  3240. {
  3241. DetachTextTail();
  3242.  
  3243. DismountHorse();
  3244.  
  3245. m_kQue_kCmdNew.clear();
  3246.  
  3247. __EffectContainer_Destroy();
  3248. __StoneSmoke_Destroy();
  3249.  
  3250. if (__IsMainInstance())
  3251. __ClearMainInstance();
  3252.  
  3253. m_GraphicThingInstance.Destroy();
  3254.  
  3255. __Initialize();
  3256. }
  3257.  
  3258. void CInstanceBase::__InitializeRotationSpeed()
  3259. {
  3260. SetRotationSpeed(c_fDefaultRotationSpeed);
  3261. }
  3262.  
  3263. void CInstanceBase::__Warrior_Initialize()
  3264. {
  3265. m_kWarrior.m_dwGeomgyeongEffect = 0;
  3266. }
  3267.  
  3268. void CInstanceBase::__Initialize()
  3269. {
  3270. __Warrior_Initialize();
  3271. __StoneSmoke_Inialize();
  3272. __EffectContainer_Initialize();
  3273. __InitializeRotationSpeed();
  3274.  
  3275. SetEventHandler(CActorInstance::IEventHandler::GetEmptyPtr());
  3276.  
  3277. m_kAffectFlagContainer.Clear();
  3278.  
  3279. m_dwLevel = 0;
  3280. m_dwGuildID = 0;
  3281. m_dwEmpireID = 0;
  3282.  
  3283. m_eType = 0;
  3284. m_eRaceType = 0;
  3285. m_eShape = 0;
  3286. m_dwRace = 0;
  3287. m_dwVirtualNumber = 0;
  3288.  
  3289. m_dwBaseCmdTime = 0;
  3290. m_dwBaseChkTime = 0;
  3291. m_dwSkipTime = 0;
  3292.  
  3293. m_GraphicThingInstance.Initialize();
  3294.  
  3295. m_dwAdvActorVID = 0;
  3296. m_dwLastDmgActorVID = 0;
  3297.  
  3298. m_nAverageNetworkGap = 0;
  3299. m_dwNextUpdateHeightTime = 0;
  3300.  
  3301. // Moving by keyboard
  3302. m_iRotatingDirection = DEGREE_DIRECTION_SAME;
  3303.  
  3304. // Moving by mouse
  3305. m_isTextTail = FALSE;
  3306. m_isGoing = FALSE;
  3307. NEW_SetSrcPixelPosition(TPixelPosition(0, 0, 0));
  3308. NEW_SetDstPixelPosition(TPixelPosition(0, 0, 0));
  3309.  
  3310. m_kPPosDust = TPixelPosition(0, 0, 0);
  3311.  
  3312.  
  3313. m_kQue_kCmdNew.clear();
  3314.  
  3315. m_dwLastComboIndex = 0;
  3316.  
  3317. m_swordRefineEffectRight = 0;
  3318. m_swordRefineEffectLeft = 0;
  3319. m_armorRefineEffect = 0;
  3320.  
  3321. m_sAlignment = 0;
  3322. #ifdef ENABLE_TITLE_SYSTEM
  3323. m_sPrestige = 0;
  3324. #endif
  3325. m_byPKMode = 0;
  3326. m_isKiller = false;
  3327. m_isPartyMember = false;
  3328.  
  3329. m_bEnableTCPState = TRUE;
  3330.  
  3331. m_stName = "";
  3332.  
  3333. memset(m_awPart, 0, sizeof(m_awPart));
  3334. memset(m_adwCRCAffectEffect, 0, sizeof(m_adwCRCAffectEffect));
  3335. //memset(m_adwCRCEmoticonEffect, 0, sizeof(m_adwCRCEmoticonEffect));
  3336. memset(&m_kMovAfterFunc, 0, sizeof(m_kMovAfterFunc));
  3337.  
  3338. m_bDamageEffectType = false;
  3339. m_dwDuelMode = DUEL_NONE;
  3340. m_dwEmoticonTime = 0;
  3341. }
  3342.  
  3343. CInstanceBase::CInstanceBase()
  3344. {
  3345. __Initialize();
  3346. }
  3347.  
  3348. CInstanceBase::~CInstanceBase()
  3349. {
  3350. Destroy();
  3351. }
  3352.  
  3353.  
  3354. void CInstanceBase::GetBoundBox(D3DXVECTOR3 * vtMin, D3DXVECTOR3 * vtMax)
  3355. {
  3356. m_GraphicThingInstance.GetBoundBox(vtMin, vtMax);
  3357. }
  3358.  
  3359. const char * CInstanceBase::GetLevelString()
  3360. {
  3361. char * str = new char[3];
  3362. sprintf(str, "%d", m_dwLevel);
  3363. return str;
  3364. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement