Advertisement
Guest User

Untitled

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