Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.32 KB | None | 0 0
  1. #include "StdAfx.h"
  2. #include "InstanceBase.h"
  3. #include "PythonTextTail.h"
  4. #include "AbstractApplication.h"
  5. #include "AbstractPlayer.h"
  6. #include "PythonPlayer.h"
  7. #include "PythonSystem.h"
  8.  
  9. #include "../EffectLib/EffectManager.h"
  10. #include "../EffectLib/ParticleSystemData.h"
  11. #include "../EterLib/Camera.h"
  12.  
  13. float CInstanceBase::ms_fDustGap;
  14. float CInstanceBase::ms_fHorseDustGap;
  15. DWORD CInstanceBase::ms_adwCRCAffectEffect[CInstanceBase::EFFECT_NUM];
  16. std::string CInstanceBase::ms_astAffectEffectAttachBone[EFFECT_NUM];
  17.  
  18. #define BYTE_COLOR_TO_D3DX_COLOR(r, g, b) D3DXCOLOR(float(r)/255.0f, float(g)/255.0f, float(b)/255.0f, 1.0f)
  19.  
  20. /*
  21. D3DXCOLOR CInstanceBase::ms_kD3DXClrPC(0xFFFFD84D);//1.0f, 0.8470f, 0.3f, 1.0f
  22. D3DXCOLOR CInstanceBase::ms_kD3DXClrNPC(0xFF7BE85E);//0.4823f, 0.9098f, 0.3686f, 1.0f
  23. D3DXCOLOR CInstanceBase::ms_kD3DXClrMOB(0xFFEC170a);//0.9254f, 0.0901f, 0.0392f, 1.0f
  24. D3DXCOLOR CInstanceBase::ms_kD3DXClrPVP(0xFF8532D9);
  25. D3DXCOLOR CInstanceBase::ms_kD3DXClrPVPSelf(0xFFEE36DF);
  26. D3DXCOLOR CInstanceBase::ms_kD3DXClrKiller = BYTE_COLOR_TO_D3DX_COLOR(180, 100, 0);
  27. D3DXCOLOR CInstanceBase::ms_kD3DXClrTitle[CInstanceBase::TITLE_MAX_NUM] =
  28. {
  29. BYTE_COLOR_TO_D3DX_COLOR( 0, 204, 255),
  30. BYTE_COLOR_TO_D3DX_COLOR( 0, 144, 255),
  31. BYTE_COLOR_TO_D3DX_COLOR( 92, 110, 255),
  32. BYTE_COLOR_TO_D3DX_COLOR(155, 155, 255),
  33. 0xFFFFFFFF, // None
  34. BYTE_COLOR_TO_D3DX_COLOR(207, 117, 0),
  35. BYTE_COLOR_TO_D3DX_COLOR(235, 83, 0),
  36. BYTE_COLOR_TO_D3DX_COLOR(227, 0, 0),
  37. BYTE_COLOR_TO_D3DX_COLOR(255, 0, 0),
  38. };
  39. */
  40.  
  41. D3DXCOLOR g_akD3DXClrTitle[CInstanceBase::TITLE_NUM];
  42. D3DXCOLOR g_akD3DXClrName[CInstanceBase::NAMECOLOR_NUM];
  43.  
  44. std::map<int, std::string> g_TitleNameMap;
  45. std::set<DWORD> g_kSet_dwPVPReadyKey;
  46. std::set<DWORD> g_kSet_dwPVPKey;
  47. std::set<DWORD> g_kSet_dwGVGKey;
  48. std::set<DWORD> g_kSet_dwDUELKey;
  49.  
  50. bool g_isEmpireNameMode=false;
  51.  
  52. void CInstanceBase::SetEmpireNameMode(bool isEnable)
  53. {
  54. g_isEmpireNameMode=isEnable;
  55.  
  56. if (isEnable)
  57. {
  58. g_akD3DXClrName[NAMECOLOR_MOB]=g_akD3DXClrName[NAMECOLOR_EMPIRE_MOB];
  59. g_akD3DXClrName[NAMECOLOR_NPC]=g_akD3DXClrName[NAMECOLOR_EMPIRE_NPC];
  60. g_akD3DXClrName[NAMECOLOR_PC]=g_akD3DXClrName[NAMECOLOR_NORMAL_PC];
  61.  
  62. for (UINT uEmpire=1; uEmpire<EMPIRE_NUM; ++uEmpire)
  63. g_akD3DXClrName[NAMECOLOR_PC+uEmpire]=g_akD3DXClrName[NAMECOLOR_EMPIRE_PC+uEmpire];
  64.  
  65. }
  66. else
  67. {
  68. g_akD3DXClrName[NAMECOLOR_MOB]=g_akD3DXClrName[NAMECOLOR_NORMAL_MOB];
  69. g_akD3DXClrName[NAMECOLOR_NPC]=g_akD3DXClrName[NAMECOLOR_NORMAL_NPC];
  70.  
  71. for (UINT uEmpire=0; uEmpire<EMPIRE_NUM; ++uEmpire)
  72. g_akD3DXClrName[NAMECOLOR_PC+uEmpire]=g_akD3DXClrName[NAMECOLOR_NORMAL_PC];
  73. }
  74. }
  75.  
  76. const D3DXCOLOR& CInstanceBase::GetIndexedNameColor(UINT eNameColor)
  77. {
  78. if (eNameColor>=NAMECOLOR_NUM)
  79. {
  80. static D3DXCOLOR s_kD3DXClrNameDefault(0xffffffff);
  81. return s_kD3DXClrNameDefault;
  82. }
  83.  
  84. return g_akD3DXClrName[eNameColor];
  85. }
  86.  
  87. void CInstanceBase::AddDamageEffect(DWORD damage,BYTE flag,BOOL bSelf,BOOL bTarget)
  88. {
  89. if(CPythonSystem::Instance().IsShowDamage())
  90. {
  91. SEffectDamage sDamage;
  92. sDamage.bSelf = bSelf;
  93. sDamage.bTarget = bTarget;
  94. sDamage.damage = damage;
  95. sDamage.flag = flag;
  96. m_DamageQueue.push_back(sDamage);
  97. }
  98. }
  99.  
  100. void CInstanceBase::ProcessDamage()
  101. {
  102. if(m_DamageQueue.empty())
  103. return;
  104.  
  105. SEffectDamage sDamage = m_DamageQueue.front();
  106.  
  107. m_DamageQueue.pop_front();
  108.  
  109. DWORD damage = sDamage.damage;
  110. BYTE flag = sDamage.flag;
  111. BOOL bSelf = sDamage.bSelf;
  112. BOOL bTarget = sDamage.bTarget;
  113.  
  114. CCamera * pCamera = CCameraManager::Instance().GetCurrentCamera();
  115. float cameraAngle = GetDegreeFromPosition2(pCamera->GetTarget().x,pCamera->GetTarget().y,pCamera->GetEye().x,pCamera->GetEye().y);
  116.  
  117. DWORD FONT_WIDTH = 30;
  118.  
  119. CEffectManager& rkEftMgr=CEffectManager::Instance();
  120.  
  121. D3DXVECTOR3 v3Pos = m_GraphicThingInstance.GetPosition();
  122. v3Pos.z += float(m_GraphicThingInstance.GetHeight());
  123.  
  124. D3DXVECTOR3 v3Rot = D3DXVECTOR3(0.0f, 0.0f, cameraAngle);
  125.  
  126. if ( (flag & DAMAGE_DODGE) || (flag & DAMAGE_BLOCK) )
  127. {
  128. if(bSelf)
  129. rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_MISS],v3Pos,v3Rot);
  130. else
  131. rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_TARGETMISS],v3Pos,v3Rot);
  132. //__AttachEffect(EFFECT_DAMAGE_MISS);
  133. return;
  134. }
  135. else if (flag & DAMAGE_CRITICAL)
  136. {
  137. //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot);
  138. //return; ¼ýÀÚµµ Ç¥½Ã.
  139. }
  140.  
  141. string strDamageType;
  142. DWORD rdwCRCEft = 0;
  143. /*
  144. if ( (flag & DAMAGE_POISON) )
  145. {
  146. strDamageType = "poison_";
  147. rdwCRCEft = EFFECT_DAMAGE_POISON;
  148. }
  149. else
  150. */
  151. {
  152. if(bSelf)
  153. {
  154. strDamageType = "damage_";
  155. if(m_bDamageEffectType==0)
  156. rdwCRCEft = EFFECT_DAMAGE_SELFDAMAGE;
  157. else
  158. rdwCRCEft = EFFECT_DAMAGE_SELFDAMAGE2;
  159. m_bDamageEffectType = !m_bDamageEffectType;
  160. }
  161. else if(bTarget == false)
  162. {
  163. strDamageType = "nontarget_";
  164. rdwCRCEft = EFFECT_DAMAGE_NOT_TARGET;
  165. return;//ÇöÀç Àû¿ë ¾ÈµÊ.
  166. }
  167. else
  168. {
  169. strDamageType = "target_";
  170. rdwCRCEft = EFFECT_DAMAGE_TARGET;
  171. }
  172. }
  173.  
  174. DWORD index = 0;
  175. DWORD num = 0;
  176. vector<string> textures;
  177. while(damage>0)
  178. {
  179. if(index > 7)
  180. {
  181. TraceError("ProcessDamage¹«ÇÑ·çÇÁ °¡´É¼º");
  182. break;
  183. }
  184. num = damage%10;
  185. damage /= 10;
  186. char numBuf[MAX_PATH];
  187. sprintf(numBuf,"%d.dds",num);
  188. textures.push_back("d:/ymir work/effect/affect/damagevalue/"+strDamageType+numBuf);
  189.  
  190. rkEftMgr.SetEffectTextures(ms_adwCRCAffectEffect[rdwCRCEft],textures);
  191.  
  192. D3DXMATRIX matrix,matTrans;
  193. D3DXMatrixIdentity(&matrix);
  194. matrix._41 = v3Pos.x;
  195. matrix._42 = v3Pos.y;
  196. matrix._43 = v3Pos.z;
  197. D3DXMatrixTranslation(&matrix,v3Pos.x,v3Pos.y,v3Pos.z);
  198. D3DXMatrixMultiply(&matrix,&pCamera->GetInverseViewMatrix(),&matrix);
  199. D3DXMatrixTranslation(&matTrans,FONT_WIDTH*index,0,0);
  200. matTrans._41 = -matTrans._41;
  201. matrix = matTrans*matrix;
  202. D3DXMatrixMultiply(&matrix,&pCamera->GetViewMatrix(),&matrix);
  203.  
  204. rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[rdwCRCEft],D3DXVECTOR3(matrix._41,matrix._42,matrix._43)
  205. ,v3Rot);
  206.  
  207. textures.clear();
  208.  
  209. index++;
  210. }
  211. }
  212.  
  213. void CInstanceBase::AttachSpecialEffect(DWORD effect)
  214. {
  215. __AttachEffect(effect);
  216. }
  217.  
  218. void CInstanceBase::LevelUp()
  219. {
  220. __AttachEffect(EFFECT_LEVELUP);
  221. }
  222.  
  223. void CInstanceBase::SkillUp()
  224. {
  225. __AttachEffect(EFFECT_SKILLUP);
  226. }
  227.  
  228. void CInstanceBase::CreateSpecialEffect(DWORD iEffectIndex)
  229. {
  230. const D3DXMATRIX & c_rmatGlobal = m_GraphicThingInstance.GetTransform();
  231.  
  232. DWORD dwEffectIndex = CEffectManager::Instance().GetEmptyIndex();
  233. DWORD dwEffectCRC = ms_adwCRCAffectEffect[iEffectIndex];
  234. CEffectManager::Instance().CreateEffectInstance(dwEffectIndex, dwEffectCRC);
  235. CEffectManager::Instance().SelectEffectInstance(dwEffectIndex);
  236. CEffectManager::Instance().SetEffectInstanceGlobalMatrix(c_rmatGlobal);
  237. }
  238.  
  239. void CInstanceBase::__EffectContainer_Continue()
  240. {
  241. SEffectContainer::Dict& rkDctEftID = __EffectContainer_GetDict();
  242.  
  243. SEffectContainer::Dict::iterator i;
  244. for (i = rkDctEftID.begin(); i != rkDctEftID.end(); ++i)
  245. __AttachEffect(i->second);
  246. }
  247.  
  248. void CInstanceBase::__EffectContainer_Suspend()
  249. {
  250. SEffectContainer::Dict& rkDctEftID = __EffectContainer_GetDict();
  251.  
  252. SEffectContainer::Dict::iterator i;
  253. for (i = rkDctEftID.begin(); i != rkDctEftID.end(); ++i)
  254. __DetachEffect(i->second);
  255. }
  256.  
  257. void CInstanceBase::__EffectContainer_Destroy()
  258. {
  259. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  260.  
  261. SEffectContainer::Dict::iterator i;
  262. for (i=rkDctEftID.begin(); i!=rkDctEftID.end(); ++i)
  263. __DetachEffect(i->second);
  264.  
  265. rkDctEftID.clear();
  266. }
  267.  
  268. void CInstanceBase::__EffectContainer_Initialize()
  269. {
  270. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  271. rkDctEftID.clear();
  272. }
  273.  
  274. CInstanceBase::SEffectContainer::Dict& CInstanceBase::__EffectContainer_GetDict()
  275. {
  276. return m_kEffectContainer.m_kDct_dwEftID;
  277. }
  278.  
  279. // Return value ¸¦ boolean ¿¡¼­ ID ·Î ¹Ù²ß´Ï´Ù
  280. DWORD CInstanceBase::__EffectContainer_AttachEffect(DWORD dwEftKey)
  281. {
  282. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  283. SEffectContainer::Dict::iterator f=rkDctEftID.find(dwEftKey);
  284. if (rkDctEftID.end()!=f)
  285. return 0;
  286.  
  287. DWORD dwEftID=__AttachEffect(dwEftKey);
  288. rkDctEftID.insert(SEffectContainer::Dict::value_type(dwEftKey, dwEftID));
  289. return dwEftID;
  290. }
  291.  
  292.  
  293. void CInstanceBase::__EffectContainer_DetachEffect(DWORD dwEftKey)
  294. {
  295. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  296. SEffectContainer::Dict::iterator f=rkDctEftID.find(dwEftKey);
  297. if (rkDctEftID.end()==f)
  298. return;
  299.  
  300. __DetachEffect(f->second);
  301.  
  302. rkDctEftID.erase(f);
  303. }
  304.  
  305. void CInstanceBase::__AttachEmpireEffect(DWORD eEmpire)
  306. {
  307. if (!__IsExistMainInstance())
  308. return;
  309.  
  310. CInstanceBase* pkInstMain=__GetMainInstancePtr();
  311.  
  312. if (IsWarp())
  313. return;
  314. if (IsObject())
  315. return;
  316. if (IsFlag())
  317. return;
  318. if (IsResource())
  319. return;
  320.  
  321. if (pkInstMain->IsGameMaster())
  322. {
  323. }
  324. else
  325. {
  326. if (pkInstMain->IsSameEmpire(*this))
  327. return;
  328.  
  329. // HIDE_OTHER_EMPIRE_EUNHYEONG_ASSASSIN
  330. if (IsAffect(AFFECT_EUNHYEONG))
  331. return;
  332. // END_OF_HIDE_OTHER_EMPIRE_EUNHYEONG_ASSASSIN
  333. }
  334.  
  335. if (IsGameMaster())
  336. return;
  337.  
  338. __EffectContainer_AttachEffect(EFFECT_EMPIRE+eEmpire);
  339. }
  340.  
  341. void CInstanceBase::__AttachSelectEffect()
  342. {
  343. __EffectContainer_AttachEffect(EFFECT_SELECT);
  344. }
  345.  
  346. void CInstanceBase::__DetachSelectEffect()
  347. {
  348. __EffectContainer_DetachEffect(EFFECT_SELECT);
  349. }
  350.  
  351. void CInstanceBase::__AttachTargetEffect()
  352. {
  353. __EffectContainer_AttachEffect(EFFECT_TARGET);
  354. }
  355.  
  356. void CInstanceBase::__DetachTargetEffect()
  357. {
  358. __EffectContainer_DetachEffect(EFFECT_TARGET);
  359. }
  360.  
  361.  
  362. void CInstanceBase::__StoneSmoke_Inialize()
  363. {
  364. m_kStoneSmoke.m_dwEftID=0;
  365. }
  366.  
  367. void CInstanceBase::__AttachSelectEffectMonster(){
  368. __EffectContainer_AttachEffect(EFFECT_MONSTER);
  369. }
  370. void CInstanceBase::__DetachSelectEffectMonster()
  371. {
  372. __EffectContainer_DetachEffect(EFFECT_MONSTER);
  373. }
  374. void CInstanceBase::__AttachTargetEffectMonster()
  375. {
  376. __EffectContainer_AttachEffect(EFFECT_TARGET_MONSTER);
  377. }
  378. void CInstanceBase::__DetachTargetEffectMonster()
  379. {
  380. __EffectContainer_DetachEffect(EFFECT_TARGET_MONSTER);
  381. }
  382.  
  383.  
  384. void CInstanceBase::__AttachSelectEffectShinsoo()
  385. {
  386. __EffectContainer_AttachEffect(EFFECT_SHINSOO);
  387. }
  388. void CInstanceBase::__DetachSelectEffectShinsoo()
  389. {
  390. __EffectContainer_DetachEffect(EFFECT_SHINSOO);
  391. }
  392. void CInstanceBase::__AttachTargetEffectShinsoo()
  393. {
  394. __EffectContainer_AttachEffect(EFFECT_TARGET_SHINSOO);
  395. }
  396. void CInstanceBase::__DetachTargetEffectShinsoo()
  397. {
  398. __EffectContainer_DetachEffect(EFFECT_TARGET_SHINSOO);
  399. }
  400.  
  401.  
  402. void CInstanceBase::__AttachSelectEffectChunjo()
  403. {
  404. __EffectContainer_AttachEffect(EFFECT_CHUNJO);
  405. }
  406. void CInstanceBase::__DetachSelectEffectChunjo()
  407. {
  408. __EffectContainer_DetachEffect(EFFECT_CHUNJO);
  409. }
  410. void CInstanceBase::__AttachTargetEffectChunjo()
  411. {
  412. __EffectContainer_AttachEffect(EFFECT_TARGET_CHUNJO);
  413. }
  414. void CInstanceBase::__DetachTargetEffectChunjo()
  415. {
  416. __EffectContainer_DetachEffect(EFFECT_TARGET_CHUNJO);
  417. }
  418.  
  419.  
  420. void CInstanceBase::__AttachSelectEffectJinnos()
  421. {
  422. __EffectContainer_AttachEffect(EFFECT_JINNOS);
  423. }
  424. void CInstanceBase::__DetachSelectEffectJinnos()
  425. {
  426. __EffectContainer_DetachEffect(EFFECT_JINNOS);
  427. }
  428. void CInstanceBase::__AttachTargetEffectJinnos()
  429. {
  430. __EffectContainer_AttachEffect(EFFECT_TARGET_JINNOS);
  431. }
  432. void CInstanceBase::__DetachTargetEffectJinnos()
  433. {
  434. __EffectContainer_DetachEffect(EFFECT_TARGET_JINNOS);
  435. }
  436.  
  437. void CInstanceBase::__StoneSmoke_Destroy()
  438. {
  439. if (!m_kStoneSmoke.m_dwEftID)
  440. return;
  441.  
  442. __DetachEffect(m_kStoneSmoke.m_dwEftID);
  443. m_kStoneSmoke.m_dwEftID=0;
  444. }
  445.  
  446. void CInstanceBase::__StoneSmoke_Create(DWORD eSmoke)
  447. {
  448. m_kStoneSmoke.m_dwEftID=m_GraphicThingInstance.AttachSmokeEffect(eSmoke);
  449. }
  450.  
  451. void CInstanceBase::SetAlpha(float fAlpha)
  452. {
  453. __SetBlendRenderingMode();
  454. __SetAlphaValue(fAlpha);
  455. }
  456.  
  457. bool CInstanceBase::UpdateDeleting()
  458. {
  459. Update();
  460. Transform();
  461.  
  462. IAbstractApplication& rApp=IAbstractApplication::GetSingleton();
  463.  
  464. float fAlpha = __GetAlphaValue() - (rApp.GetGlobalElapsedTime() * 1.5f);
  465. __SetAlphaValue(fAlpha);
  466.  
  467. if (fAlpha < 0.0f)
  468. return false;
  469.  
  470. return true;
  471. }
  472.  
  473. void CInstanceBase::DeleteBlendOut()
  474. {
  475. __SetBlendRenderingMode();
  476. __SetAlphaValue(1.0f);
  477. DetachTextTail();
  478.  
  479. IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
  480. rkPlayer.NotifyDeletingCharacterInstance(GetVirtualID());
  481. }
  482.  
  483. void CInstanceBase::ClearPVPKeySystem()
  484. {
  485. g_kSet_dwPVPReadyKey.clear();
  486. g_kSet_dwPVPKey.clear();
  487. g_kSet_dwGVGKey.clear();
  488. g_kSet_dwDUELKey.clear();
  489. }
  490.  
  491. void CInstanceBase::InsertPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  492. {
  493. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  494.  
  495. g_kSet_dwPVPKey.insert(dwPVPKey);
  496. }
  497.  
  498. void CInstanceBase::InsertPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  499. {
  500. DWORD dwPVPReadyKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  501.  
  502. g_kSet_dwPVPKey.insert(dwPVPReadyKey);
  503. }
  504.  
  505. void CInstanceBase::RemovePVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  506. {
  507. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  508.  
  509. g_kSet_dwPVPKey.erase(dwPVPKey);
  510. }
  511.  
  512. void CInstanceBase::InsertGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID)
  513. {
  514. DWORD dwGVGKey = __GetPVPKey(dwSrcGuildVID, dwDstGuildVID);
  515. g_kSet_dwGVGKey.insert(dwGVGKey);
  516. }
  517.  
  518. void CInstanceBase::RemoveGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID)
  519. {
  520. DWORD dwGVGKey = __GetPVPKey(dwSrcGuildVID, dwDstGuildVID);
  521. g_kSet_dwGVGKey.erase(dwGVGKey);
  522. }
  523.  
  524. void CInstanceBase::InsertDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  525. {
  526. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  527.  
  528. g_kSet_dwDUELKey.insert(dwPVPKey);
  529. }
  530.  
  531. DWORD CInstanceBase::__GetPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  532. {
  533. if (dwVIDSrc>dwVIDDst)
  534. std::swap(dwVIDSrc, dwVIDDst);
  535.  
  536. DWORD awSrc[2];
  537. awSrc[0]=dwVIDSrc;
  538. awSrc[1]=dwVIDDst;
  539.  
  540. const BYTE * s = (const BYTE *) awSrc;
  541. const BYTE * end = s + sizeof(awSrc);
  542. unsigned long h = 0;
  543.  
  544. while (s < end)
  545. {
  546. h *= 16777619;
  547. h ^= (BYTE) *(BYTE *) (s++);
  548. }
  549.  
  550. return h;
  551. }
  552.  
  553. bool CInstanceBase::__FindPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  554. {
  555. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  556.  
  557. if (g_kSet_dwPVPKey.end()==g_kSet_dwPVPKey.find(dwPVPKey))
  558. return false;
  559.  
  560. return true;
  561. }
  562.  
  563. bool CInstanceBase::__FindPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  564. {
  565. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  566.  
  567. if (g_kSet_dwPVPReadyKey.end()==g_kSet_dwPVPReadyKey.find(dwPVPKey))
  568. return false;
  569.  
  570. return true;
  571. }
  572. //±æµåÀü½Ã »ó´ë ±æµåÀÎÁö È®ÀÎÇÒ¶§.
  573. bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID)
  574. {
  575. DWORD dwGVGKey=__GetPVPKey(dwSrcGuildID, dwDstGuildID);
  576.  
  577. if (g_kSet_dwGVGKey.end()==g_kSet_dwGVGKey.find(dwGVGKey))
  578. return false;
  579.  
  580. return true;
  581. }
  582. //´ë·Ã ¸ðµå¿¡¼­´Â ´ë·Ã »ó´ë¸¸ °ø°ÝÇÒ ¼ö ÀÖ´Ù.
  583. bool CInstanceBase::__FindDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  584. {
  585. DWORD dwDUELKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  586.  
  587. if (g_kSet_dwDUELKey.end()==g_kSet_dwDUELKey.find(dwDUELKey))
  588. return false;
  589.  
  590. return true;
  591. }
  592.  
  593. bool CInstanceBase::IsPVPInstance(CInstanceBase& rkInstSel)
  594. {
  595. DWORD dwVIDSrc=GetVirtualID();
  596. DWORD dwVIDDst=rkInstSel.GetVirtualID();
  597.  
  598. DWORD dwGuildIDSrc=GetGuildID();
  599. DWORD dwGuildIDDst=rkInstSel.GetGuildID();
  600.  
  601. if (GetDuelMode()) //´ë·Ã ¸ðµåÀ϶§´Â ~_~
  602. return true;
  603.  
  604. return __FindPVPKey(dwVIDSrc, dwVIDDst) || __FindGVGKey(dwGuildIDSrc, dwGuildIDDst);
  605. //__FindDUELKey(dwVIDSrc, dwVIDDst);
  606. }
  607.  
  608. const D3DXCOLOR& CInstanceBase::GetNameColor()
  609. {
  610. return GetIndexedNameColor(GetNameColorIndex());
  611. }
  612.  
  613. UINT CInstanceBase::GetNameColorIndex()
  614. {
  615. #ifdef __OFFLINE_SHOP__
  616. if (GetRace() >= 30005 && GetRace() <= 30010)
  617. return NAMECOLOR_OFFSHOP;
  618. #endif
  619.  
  620. if (IsPC())
  621. {
  622. if (m_isKiller)
  623. {
  624. return NAMECOLOR_PK;
  625. }
  626.  
  627. if (__IsExistMainInstance() && !__IsMainInstance())
  628. {
  629. CInstanceBase* pkInstMain=__GetMainInstancePtr();
  630. if (!pkInstMain)
  631. {
  632. TraceError("CInstanceBase::GetNameColorIndex - MainInstance is NULL");
  633. return NAMECOLOR_PC;
  634. }
  635. DWORD dwVIDMain=pkInstMain->GetVirtualID();
  636. DWORD dwVIDSelf=GetVirtualID();
  637.  
  638. if (pkInstMain->GetDuelMode())
  639. {
  640. switch(pkInstMain->GetDuelMode())
  641. {
  642. case DUEL_CANNOTATTACK:
  643. return NAMECOLOR_PC + GetEmpireID();
  644. case DUEL_START:
  645. if(__FindDUELKey(dwVIDMain, dwVIDSelf))
  646. return NAMECOLOR_PVP;
  647. else
  648. return NAMECOLOR_PC + GetEmpireID();
  649. }
  650. }
  651.  
  652. if (pkInstMain->IsSameEmpire(*this))
  653. {
  654. if (__FindPVPKey(dwVIDMain, dwVIDSelf))
  655. {
  656. return NAMECOLOR_PVP;
  657. }
  658.  
  659. DWORD dwGuildIDMain=pkInstMain->GetGuildID();
  660. DWORD dwGuildIDSelf=GetGuildID();
  661. if (__FindGVGKey(dwGuildIDMain, dwGuildIDSelf))
  662. {
  663. return NAMECOLOR_PVP;
  664. }
  665. /*
  666. if (__FindDUELKey(dwVIDMain, dwVIDSelf))
  667. {
  668. return NAMECOLOR_PVP;
  669. }
  670. */
  671. }
  672. else
  673. {
  674. return NAMECOLOR_PVP;
  675. }
  676. }
  677.  
  678. IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
  679. if (rPlayer.IsPartyMemberByVID(GetVirtualID()))
  680. return NAMECOLOR_PARTY;
  681.  
  682. return NAMECOLOR_PC + GetEmpireID();
  683.  
  684. }
  685. else if (IsNPC())
  686. {
  687. return NAMECOLOR_NPC;
  688. }
  689. else if (IsEnemy())
  690. {
  691. return NAMECOLOR_MOB;
  692. }
  693. else if (IsPoly())
  694. {
  695. return NAMECOLOR_MOB;
  696. }
  697.  
  698.  
  699. return D3DXCOLOR(0xffffffff);
  700. }
  701.  
  702. const D3DXCOLOR& CInstanceBase::GetTitleColor()
  703. {
  704. UINT uGrade = GetAlignmentGrade();
  705. if ( uGrade >= TITLE_NUM)
  706. {
  707. static D3DXCOLOR s_kD3DXClrTitleDefault(0xffffffff);
  708. return s_kD3DXClrTitleDefault;
  709. }
  710.  
  711. return g_akD3DXClrTitle[uGrade];
  712. }
  713.  
  714. void CInstanceBase::AttachTextTail()
  715. {
  716. if (m_isTextTail)
  717. {
  718. TraceError("CInstanceBase::AttachTextTail - VID [%d] ALREADY EXIST", GetVirtualID());
  719. return;
  720. }
  721.  
  722. m_isTextTail=true;
  723.  
  724. DWORD dwVID=GetVirtualID();
  725.  
  726. float fTextTailHeight=IsMountingHorse() ? 110.0f : 10.0f;
  727.  
  728. static D3DXCOLOR s_kD3DXClrTextTail=D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
  729. CPythonTextTail::Instance().RegisterCharacterTextTail(m_dwGuildID, dwVID, s_kD3DXClrTextTail, fTextTailHeight);
  730.  
  731. // CHARACTER_LEVEL
  732. if (m_dwLevel)
  733. {
  734. UpdateTextTailLevel(m_dwLevel);
  735. }
  736. }
  737.  
  738. void CInstanceBase::DetachTextTail()
  739. {
  740. if (!m_isTextTail)
  741. return;
  742.  
  743. m_isTextTail=false;
  744. CPythonTextTail::Instance().DeleteCharacterTextTail(GetVirtualID());
  745. }
  746.  
  747. void CInstanceBase::UpdateTextTailLevel(DWORD level)
  748. {
  749. //static D3DXCOLOR s_kLevelColor = D3DXCOLOR(119.0f/255.0f, 246.0f/255.0f, 168.0f/255.0f, 1.0f);
  750. static D3DXCOLOR s_kLevelColor = D3DXCOLOR(152.0f/255.0f, 255.0f/255.0f, 51.0f/255.0f, 1.0f);
  751.  
  752. char szText[256];
  753. if (level >= 1 && level < 10)
  754. {
  755. sprintf(szText, "|cFF959697[ãÓÊæ?%d]|r", level);
  756. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  757. }
  758. else if (level >= 10 && level < 20)
  759. {
  760. sprintf(szText, "|cFFFFFFFF[ãÓÊæ?%d]|r", level);
  761. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  762. }
  763. else if (level >= 20 && level < 30)
  764. {
  765. sprintf(szText, "|cFF00FF7F[ãÓÊæ?%d]|r", level);
  766. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  767. }
  768. else if (level >= 30 && level < 40)
  769. {
  770. sprintf(szText, "|cFF00FF00[ãÓÊæ?%d]|r", level);
  771. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  772. }
  773. else if (level >= 40 && level < 50)
  774. {
  775. sprintf(szText, "|cFF00CCFF[ãÓÊæ?%d]|r", level);
  776. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  777. }
  778. else if (level >= 50 && level < 60)
  779. {
  780. sprintf(szText, "|cFF0000FF[ãÓÊæ?%d]|r", level);
  781. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  782. }
  783. else if (level >= 60 && level < 70)
  784. {
  785. sprintf(szText, "|cFFDA70D6[ãÓÊæ?%d]|r", level);
  786. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  787. }
  788. else if (level >= 70 && level < 80)
  789. {
  790. sprintf(szText, "|cFFC67171[ãÓÊæ?%d]|r", level);
  791. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  792. }
  793. else if (level >= 80 && level < 90)
  794. {
  795. sprintf(szText, "|cFF00FFFF[ãÓÊæ?%d]|r", level);
  796. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  797. }
  798. else if (level >= 90 && level < 100)
  799. {
  800. sprintf(szText, "|cFFFFCC00[ãÓÊæ?%d]|r", level);
  801. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  802. }
  803. else if (level >= 100 && level < 110)
  804. {
  805. sprintf(szText, "|cFFFF4500[ãÓÊæ?%d]|r", level);
  806. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  807. }
  808. else if (level >= 110 && level < 120)
  809. {
  810. sprintf(szText, "|cFF5f1515[ãÓÊæ?%d]|r", level);
  811. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  812. }
  813.  
  814. else if (level >= 120)
  815. {
  816. sprintf(szText, "|cFF109fd4[ãÓÊæ?%d]|r", level);
  817. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  818. }
  819. }
  820.  
  821. void CInstanceBase::RefreshTextTail()
  822. {
  823. CPythonTextTail::Instance().SetCharacterTextTailColor(GetVirtualID(), GetNameColor());
  824.  
  825. int iAlignmentGrade = GetAlignmentGrade();
  826. if (TITLE_NONE == iAlignmentGrade)
  827. {
  828. CPythonTextTail::Instance().DetachTitle(GetVirtualID());
  829. }
  830. else
  831. {
  832. std::map<int, std::string>::iterator itor = g_TitleNameMap.find(iAlignmentGrade);
  833. if (g_TitleNameMap.end() != itor)
  834. {
  835. const std::string & c_rstrTitleName = itor->second;
  836. CPythonTextTail::Instance().AttachTitle(GetVirtualID(), c_rstrTitleName.c_str(), GetTitleColor());
  837. }
  838. }
  839. }
  840.  
  841. void CInstanceBase::RefreshTextTailTitle()
  842. {
  843. RefreshTextTail();
  844. }
  845.  
  846. // 2004.07.25.myevan.ÀÌÆåÆ® ¾È ºÙ´Â ¹®Á¦ ÇØ°á
  847. /////////////////////////////////////////////////
  848. void CInstanceBase::__ClearAffectFlagContainer()
  849. {
  850. m_kAffectFlagContainer.Clear();
  851. }
  852.  
  853. void CInstanceBase::__ClearAffects()
  854. {
  855. if (IsStone())
  856. {
  857. __StoneSmoke_Destroy();
  858. }
  859. else
  860. {
  861. for (int iAffect=0; iAffect<AFFECT_NUM; ++iAffect)
  862. {
  863. __DetachEffect(m_adwCRCAffectEffect[iAffect]);
  864. m_adwCRCAffectEffect[iAffect]=0;
  865. }
  866.  
  867. __ClearAffectFlagContainer();
  868. }
  869.  
  870. m_GraphicThingInstance.__OnClearAffects();
  871. }
  872.  
  873. /////////////////////////////////////////////////
  874.  
  875. void CInstanceBase::__SetNormalAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  876. {
  877. for (int i=0; i<CAffectFlagContainer::BIT_SIZE; ++i)
  878. {
  879. bool isOldSet=m_kAffectFlagContainer.IsSet(i);
  880. bool isNewSet=c_rkAffectFlagContainer.IsSet(i);
  881.  
  882. if (isOldSet != isNewSet)
  883. {
  884. __SetAffect(i, isNewSet);
  885.  
  886. if (isNewSet)
  887. m_GraphicThingInstance.__OnSetAffect(i);
  888. else
  889. m_GraphicThingInstance.__OnResetAffect(i);
  890. }
  891. }
  892.  
  893. m_kAffectFlagContainer.CopyInstance(c_rkAffectFlagContainer);
  894. }
  895.  
  896. void CInstanceBase::__SetStoneSmokeFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  897. {
  898. m_kAffectFlagContainer.CopyInstance(c_rkAffectFlagContainer);
  899.  
  900. DWORD eSmoke;
  901. if (m_kAffectFlagContainer.IsSet(STONE_SMOKE8))
  902. eSmoke=3;
  903. else if (m_kAffectFlagContainer.IsSet(STONE_SMOKE5)|m_kAffectFlagContainer.IsSet(STONE_SMOKE6)|m_kAffectFlagContainer.IsSet(STONE_SMOKE7))
  904. eSmoke=2;
  905. else if (m_kAffectFlagContainer.IsSet(STONE_SMOKE2)|m_kAffectFlagContainer.IsSet(STONE_SMOKE3)|m_kAffectFlagContainer.IsSet(STONE_SMOKE4))
  906. eSmoke=1;
  907. else
  908. eSmoke=0;
  909.  
  910. __StoneSmoke_Destroy();
  911. __StoneSmoke_Create(eSmoke);
  912. }
  913.  
  914. void CInstanceBase::SetAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  915. {
  916. if (IsBuilding())
  917. {
  918. return;
  919. }
  920. else if (IsStone())
  921. {
  922. __SetStoneSmokeFlagContainer(c_rkAffectFlagContainer);
  923. }
  924. else
  925. {
  926. __SetNormalAffectFlagContainer(c_rkAffectFlagContainer);
  927. }
  928. }
  929.  
  930.  
  931. void CInstanceBase::SCRIPT_SetAffect(UINT eAffect, bool isVisible)
  932. {
  933. __SetAffect(eAffect, isVisible);
  934. }
  935.  
  936. void CInstanceBase::__SetReviveInvisibilityAffect(bool isVisible)
  937. {
  938. if (isVisible)
  939. {
  940. // NOTE : Dress ¸¦ ÀÔ°í ÀÖÀ¸¸é Alpha ¸¦ ³ÖÁö ¾Ê´Â´Ù.
  941. if (IsWearingDress())
  942. return;
  943.  
  944. m_GraphicThingInstance.BlendAlphaValue(0.5f, 1.0f);
  945. }
  946. else
  947. {
  948. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  949. }
  950. }
  951.  
  952. void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible)
  953. {
  954. if (isVisible)
  955. {
  956. // NOTE : Dress ¸¦ ÀÔ°í ÀÖÀ¸¸é Alpha ¸¦ ³ÖÁö ¾Ê´Â´Ù.
  957. if (IsWearingDress())
  958. return;
  959.  
  960. if (__IsMainInstance() || __MainCanSeeHiddenThing())
  961. {
  962. m_GraphicThingInstance.BlendAlphaValue(0.5f, 1.0f);
  963. }
  964. else
  965. {
  966. // 2004.10.16.myevan.ÀºÇü¹ý ¿ÏÀü Åõ¸í
  967. m_GraphicThingInstance.BlendAlphaValue(0.0f, 1.0f);
  968. m_GraphicThingInstance.HideAllAttachingEffect();
  969. }
  970. }
  971. else
  972. {
  973. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  974. m_GraphicThingInstance.ShowAllAttachingEffect();
  975. }
  976. }
  977.  
  978. void CInstanceBase::__Shaman_SetParalysis(bool isParalysis)
  979. {
  980. m_GraphicThingInstance.SetParalysis(isParalysis);
  981. }
  982.  
  983.  
  984.  
  985. void CInstanceBase::__Warrior_SetGeomgyeongAffect(bool isVisible)
  986. {
  987. if (isVisible)
  988. {
  989. if (IsWearingDress())
  990. return;
  991.  
  992. if (m_kWarrior.m_dwGeomgyeongEffect)
  993. __DetachEffect(m_kWarrior.m_dwGeomgyeongEffect);
  994.  
  995. m_GraphicThingInstance.SetReachScale(1.5f);
  996. if (m_GraphicThingInstance.IsTwoHandMode())
  997. m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+WEAPON_TWOHAND);
  998. else
  999. m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+WEAPON_ONEHAND);
  1000. }
  1001. else
  1002. {
  1003. m_GraphicThingInstance.SetReachScale(1.0f);
  1004.  
  1005. __DetachEffect(m_kWarrior.m_dwGeomgyeongEffect);
  1006. m_kWarrior.m_dwGeomgyeongEffect=0;
  1007. }
  1008. }
  1009.  
  1010. void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible)
  1011. {
  1012. switch (eAffect)
  1013. {
  1014. case AFFECT_YMIR:
  1015. if (IsAffect(AFFECT_INVISIBILITY))
  1016. return;
  1017. break;
  1018. /*
  1019. case AFFECT_GWIGEOM: // Àü±â ¼Ó¼º °ø°ÝÀ¸·Î ¹Ù²ð ¿¹Á¤
  1020. if (isVisible)
  1021. {
  1022. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_ELECTRIC_HIT]);
  1023. m_GraphicThingInstance.SetBattleAttachEffect(ms_adwCRCAffectEffect[EFFECT_ELECTRIC_ATTACH]);
  1024. }
  1025. else
  1026. {
  1027. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  1028. m_GraphicThingInstance.SetBattleAttachEffect(0);
  1029. }
  1030. return;
  1031. break;
  1032. case AFFECT_HWAYEOM: // È­¿° ¼Ó¼º °ø°ÝÀ¸·Î ¹Ù²ð ¿¹Á¤
  1033. if (isVisible)
  1034. {
  1035. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_FLAME_HIT]);
  1036. m_GraphicThingInstance.SetBattleAttachEffect(ms_adwCRCAffectEffect[EFFECT_FLAME_ATTACH]);
  1037. }
  1038. else
  1039. {
  1040. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  1041. m_GraphicThingInstance.SetBattleAttachEffect(0);
  1042. }
  1043. // È­¿°ÂüÀº °ø°ÝÇÒ ¶§¸¸ ÀϽÃÀûÀ¸·Î Visible ÇÕ´Ï´Ù.
  1044. return;
  1045. break;
  1046. */
  1047. case AFFECT_CHEONGEUN:
  1048. m_GraphicThingInstance.SetResistFallen(isVisible);
  1049. break;
  1050. case AFFECT_GEOMGYEONG:
  1051. __Warrior_SetGeomgyeongAffect(isVisible);
  1052. return;
  1053. break;
  1054. case AFFECT_REVIVE_INVISIBILITY:
  1055. __Assassin_SetEunhyeongAffect(isVisible);
  1056. break;
  1057. case AFFECT_EUNHYEONG:
  1058. __Assassin_SetEunhyeongAffect(isVisible);
  1059. break;
  1060. case AFFECT_GYEONGGONG:
  1061. case AFFECT_KWAESOK:
  1062. // °æ°ø¼ú, Äè¼ÓÀº ¶Û¶§¸¸ Attaching ½Ãŵ´Ï´Ù. - [levites]
  1063. if (isVisible)
  1064. if (!IsWalking())
  1065. return;
  1066. break;
  1067. case AFFECT_INVISIBILITY:
  1068. // 2004.07.17.levites.isShow¢¬| ViewFrustumCheck¡¤I ¨¬?¡Æ©¡
  1069. if (isVisible)
  1070. {
  1071. m_GraphicThingInstance.SetDeactiveAllAttachingEffect();
  1072. __EffectContainer_Suspend();
  1073. DetachTextTail();
  1074. }
  1075. else
  1076. {
  1077. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  1078. m_GraphicThingInstance.SetActiveAllAttachingEffect();
  1079. //__EffectContainer_Continue();
  1080. AttachTextTail();
  1081. RefreshTextTail();
  1082. }
  1083. return;
  1084. break;
  1085. // case AFFECT_FAINT:
  1086. // m_GraphicThingInstance.SetFaint(isVisible);
  1087. // break;
  1088. // case AFFECT_SLEEP:
  1089. // m_GraphicThingInstance.SetSleep(isVisible);
  1090. // break;
  1091. case AFFECT_STUN:
  1092. m_GraphicThingInstance.SetSleep(isVisible);
  1093. break;
  1094. }
  1095.  
  1096. if (eAffect>=AFFECT_NUM)
  1097. {
  1098. TraceError("CInstanceBase[VID:%d]::SetAffect(eAffect:%d<AFFECT_NUM:%d, isVisible=%d)", GetVirtualID(), eAffect, isVisible);
  1099. return;
  1100. }
  1101.  
  1102. if (isVisible)
  1103. {
  1104. if (!m_adwCRCAffectEffect[eAffect])
  1105. {
  1106. m_adwCRCAffectEffect[eAffect]=__AttachEffect(EFFECT_AFFECT+eAffect);
  1107. }
  1108. }
  1109. else
  1110. {
  1111. if (m_adwCRCAffectEffect[eAffect])
  1112. {
  1113. __DetachEffect(m_adwCRCAffectEffect[eAffect]);
  1114. m_adwCRCAffectEffect[eAffect]=0;
  1115. }
  1116. }
  1117. }
  1118.  
  1119. bool CInstanceBase::IsPossibleEmoticon()
  1120. {
  1121. CEffectManager& rkEftMgr=CEffectManager::Instance();
  1122. for(DWORD eEmoticon = 0; eEmoticon < EMOTICON_NUM; eEmoticon++)
  1123. {
  1124. DWORD effectID = ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon];
  1125. if( effectID && rkEftMgr.IsAliveEffect(effectID) )
  1126. return false;
  1127. }
  1128.  
  1129. if(ELTimer_GetMSec() - m_dwEmoticonTime < 1000)
  1130. {
  1131. TraceError("ELTimer_GetMSec() - m_dwEmoticonTime");
  1132. return false;
  1133. }
  1134.  
  1135. return true;
  1136. }
  1137.  
  1138. void CInstanceBase::SetFishEmoticon()
  1139. {
  1140. SetEmoticon(EMOTICON_FISH);
  1141. }
  1142.  
  1143. void CInstanceBase::SetEmoticon(UINT eEmoticon)
  1144. {
  1145. if (eEmoticon>=EMOTICON_NUM)
  1146. {
  1147. TraceError("CInstanceBase[VID:%d]::SetEmoticon(eEmoticon:%d<EMOTICON_NUM:%d, isVisible=%d)",
  1148. GetVirtualID(), eEmoticon);
  1149. return;
  1150. }
  1151. if (IsPossibleEmoticon())
  1152. {
  1153. D3DXVECTOR3 v3Pos = m_GraphicThingInstance.GetPosition();
  1154. v3Pos.z += float(m_GraphicThingInstance.GetHeight());
  1155.  
  1156. //CEffectManager& rkEftMgr=CEffectManager::Instance();
  1157. CCamera * pCamera = CCameraManager::Instance().GetCurrentCamera();
  1158.  
  1159. D3DXVECTOR3 v3Dir = (pCamera->GetEye()-v3Pos)*9/10;
  1160. v3Pos = pCamera->GetEye()-v3Dir;
  1161.  
  1162. v3Pos = D3DXVECTOR3(0,0,0);
  1163. v3Pos.z += float(m_GraphicThingInstance.GetHeight());
  1164.  
  1165. //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon],v3Pos,D3DXVECTOR3(0,0,0));
  1166. m_GraphicThingInstance.AttachEffectByID(0, NULL, ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon],&v3Pos);
  1167. m_dwEmoticonTime = ELTimer_GetMSec();
  1168. }
  1169. }
  1170.  
  1171. void CInstanceBase::SetDustGap(float fDustGap)
  1172. {
  1173. ms_fDustGap=fDustGap;
  1174. }
  1175.  
  1176. void CInstanceBase::SetHorseDustGap(float fDustGap)
  1177. {
  1178. ms_fHorseDustGap=fDustGap;
  1179. }
  1180.  
  1181. void CInstanceBase::__DetachEffect(DWORD dwEID)
  1182. {
  1183. m_GraphicThingInstance.DettachEffect(dwEID);
  1184. }
  1185.  
  1186. DWORD CInstanceBase::__AttachEffect(UINT eEftType)
  1187. {
  1188. // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î º¯°æ
  1189. if (IsAffect(AFFECT_INVISIBILITY))
  1190. return 0;
  1191.  
  1192. if (eEftType>=EFFECT_NUM)
  1193. return 0;
  1194.  
  1195. if (ms_astAffectEffectAttachBone[eEftType].empty())
  1196. {
  1197. return m_GraphicThingInstance.AttachEffectByID(0, NULL, ms_adwCRCAffectEffect[eEftType]);
  1198. }
  1199. else
  1200. {
  1201. std::string & rstrBoneName = ms_astAffectEffectAttachBone[eEftType];
  1202. const char * c_szBoneName;
  1203. // ¾ç¼Õ¿¡ ºÙÀÏ ¶§ »ç¿ëÇÑ´Ù.
  1204. // ÀÌ·± ½ÄÀÇ ¿¹¿Ü 󸮸¦ ÇسõÀº °ÍÀº ij¸¯ÅÍ ¸¶´Ù Equip ÀÇ Bone Name ÀÌ ´Ù¸£±â ¶§¹®.
  1205. if (0 == rstrBoneName.compare("PART_WEAPON"))
  1206. {
  1207. if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szBoneName))
  1208. {
  1209. return m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, ms_adwCRCAffectEffect[eEftType]);
  1210. }
  1211. }
  1212. else if (0 == rstrBoneName.compare("PART_WEAPON_LEFT"))
  1213. {
  1214. if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON_LEFT, &c_szBoneName))
  1215. {
  1216. return m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, ms_adwCRCAffectEffect[eEftType]);
  1217. }
  1218. }
  1219. else if (0 == rstrBoneName.compare("PART_ACCE"))
  1220. {
  1221. if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_ACCE, &c_szBoneName))
  1222. {
  1223. return m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, ms_adwCRCAffectEffect[eEftType]);
  1224. }
  1225. }
  1226. else
  1227. {
  1228. return m_GraphicThingInstance.AttachEffectByID(0, rstrBoneName.c_str(), ms_adwCRCAffectEffect[eEftType]);
  1229. }
  1230. }
  1231.  
  1232. return 0;
  1233. }
  1234.  
  1235. void CInstanceBase::__ComboProcess()
  1236. {
  1237. /*
  1238. DWORD dwcurComboIndex = m_GraphicThingInstance.GetComboIndex();
  1239.  
  1240. if (0 != dwcurComboIndex)
  1241. {
  1242. if (m_dwLastComboIndex != m_GraphicThingInstance.GetComboIndex())
  1243. {
  1244. if (!m_GraphicThingInstance.IsHandMode() & IsAffect(AFFECT_HWAYEOM))
  1245. {
  1246. __AttachEffect(EFFECT_FLAME_ATTACK);
  1247. }
  1248. }
  1249. }
  1250.  
  1251. m_dwLastComboIndex = dwcurComboIndex;
  1252. */
  1253. }
  1254.  
  1255. bool CInstanceBase::RegisterEffect(UINT eEftType, const char* c_szEftAttachBone, const char* c_szEftName, bool isCache)
  1256. {
  1257. if (eEftType>=EFFECT_NUM)
  1258. return false;
  1259.  
  1260. ms_astAffectEffectAttachBone[eEftType]=c_szEftAttachBone;
  1261.  
  1262. DWORD& rdwCRCEft=ms_adwCRCAffectEffect[eEftType];
  1263. if (!CEffectManager::Instance().RegisterEffect2(c_szEftName, &rdwCRCEft, isCache))
  1264. {
  1265. TraceError("CInstanceBase::RegisterEffect(eEftType=%d, c_szEftAttachBone=%s, c_szEftName=%s, isCache=%d) - Error", eEftType, c_szEftAttachBone, c_szEftName, isCache);
  1266. rdwCRCEft=0;
  1267. return false;
  1268. }
  1269.  
  1270. return true;
  1271. }
  1272.  
  1273. void CInstanceBase::RegisterTitleName(int iIndex, const char * c_szTitleName)
  1274. {
  1275. g_TitleNameMap.insert(make_pair(iIndex, c_szTitleName));
  1276. }
  1277.  
  1278. D3DXCOLOR __RGBToD3DXColoru(UINT r, UINT g, UINT b)
  1279. {
  1280. DWORD dwColor=0xff;dwColor<<=8;
  1281. dwColor|=r;dwColor<<=8;
  1282. dwColor|=g;dwColor<<=8;
  1283. dwColor|=b;
  1284.  
  1285. return D3DXCOLOR(dwColor);
  1286. }
  1287.  
  1288. bool CInstanceBase::RegisterNameColor(UINT uIndex, UINT r, UINT g, UINT b)
  1289. {
  1290. if (uIndex>=NAMECOLOR_NUM)
  1291. return false;
  1292.  
  1293. g_akD3DXClrName[uIndex]=__RGBToD3DXColoru(r, g, b);
  1294. return true;
  1295. }
  1296.  
  1297. bool CInstanceBase::RegisterTitleColor(UINT uIndex, UINT r, UINT g, UINT b)
  1298. {
  1299. if (uIndex>=TITLE_NUM)
  1300. return false;
  1301.  
  1302. g_akD3DXClrTitle[uIndex]=__RGBToD3DXColoru(r, g, b);
  1303. return true;
  1304. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement