Advertisement
Guest User

Untitled

a guest
Jul 30th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.46 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_Destroy()
  240. {
  241. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  242.  
  243. SEffectContainer::Dict::iterator i;
  244. for (i=rkDctEftID.begin(); i!=rkDctEftID.end(); ++i)
  245. __DetachEffect(i->second);
  246.  
  247. rkDctEftID.clear();
  248. }
  249.  
  250. void CInstanceBase::__EffectContainer_Initialize()
  251. {
  252. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  253. rkDctEftID.clear();
  254. }
  255.  
  256. CInstanceBase::SEffectContainer::Dict& CInstanceBase::__EffectContainer_GetDict()
  257. {
  258. return m_kEffectContainer.m_kDct_dwEftID;
  259. }
  260.  
  261. // Return value ¸¦ boolean żˇĽ­ ID ·Î ąŮ˛ß´Ď´Ů
  262. DWORD CInstanceBase::__EffectContainer_AttachEffect(DWORD dwEftKey)
  263. {
  264. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  265. SEffectContainer::Dict::iterator f=rkDctEftID.find(dwEftKey);
  266. if (rkDctEftID.end()!=f)
  267. return 0;
  268.  
  269. DWORD dwEftID=__AttachEffect(dwEftKey);
  270. rkDctEftID.insert(SEffectContainer::Dict::value_type(dwEftKey, dwEftID));
  271. return dwEftID;
  272. }
  273.  
  274.  
  275. void CInstanceBase::__EffectContainer_DetachEffect(DWORD dwEftKey)
  276. {
  277. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  278. SEffectContainer::Dict::iterator f=rkDctEftID.find(dwEftKey);
  279. if (rkDctEftID.end()==f)
  280. return;
  281.  
  282. __DetachEffect(f->second);
  283.  
  284. rkDctEftID.erase(f);
  285. }
  286.  
  287. void CInstanceBase::__AttachEmpireEffect(DWORD eEmpire)
  288. {
  289. if (!__IsExistMainInstance())
  290. return;
  291.  
  292. CInstanceBase* pkInstMain=__GetMainInstancePtr();
  293.  
  294. if (IsWarp())
  295. return;
  296. if (IsObject())
  297. return;
  298. if (IsFlag())
  299. return;
  300. if (IsResource())
  301. return;
  302.  
  303. if (pkInstMain->IsGameMaster())
  304. {
  305. }
  306. else
  307. {
  308. if (pkInstMain->IsSameEmpire(*this))
  309. return;
  310.  
  311. // HIDE_OTHER_EMPIRE_EUNHYEONG_ASSASSIN
  312. if (IsAffect(AFFECT_EUNHYEONG))
  313. return;
  314. // END_OF_HIDE_OTHER_EMPIRE_EUNHYEONG_ASSASSIN
  315. }
  316.  
  317. if (IsGameMaster())
  318. return;
  319.  
  320. __EffectContainer_AttachEffect(EFFECT_EMPIRE+eEmpire);
  321. }
  322.  
  323. void CInstanceBase::__AttachSelectEffect()
  324. {
  325. __EffectContainer_AttachEffect(EFFECT_SELECT);
  326. }
  327.  
  328. void CInstanceBase::__DetachSelectEffect()
  329. {
  330. __EffectContainer_DetachEffect(EFFECT_SELECT);
  331. }
  332.  
  333. void CInstanceBase::__AttachTargetEffect()
  334. {
  335. __EffectContainer_AttachEffect(EFFECT_TARGET);
  336. }
  337.  
  338. void CInstanceBase::__DetachTargetEffect()
  339. {
  340. __EffectContainer_DetachEffect(EFFECT_TARGET);
  341. }
  342.  
  343.  
  344. void CInstanceBase::__StoneSmoke_Inialize()
  345. {
  346. m_kStoneSmoke.m_dwEftID=0;
  347. }
  348.  
  349. void CInstanceBase::__StoneSmoke_Destroy()
  350. {
  351. if (!m_kStoneSmoke.m_dwEftID)
  352. return;
  353.  
  354. __DetachEffect(m_kStoneSmoke.m_dwEftID);
  355. m_kStoneSmoke.m_dwEftID=0;
  356. }
  357.  
  358. void CInstanceBase::__StoneSmoke_Create(DWORD eSmoke)
  359. {
  360. m_kStoneSmoke.m_dwEftID=m_GraphicThingInstance.AttachSmokeEffect(eSmoke);
  361. }
  362.  
  363. void CInstanceBase::SetAlpha(float fAlpha)
  364. {
  365. __SetBlendRenderingMode();
  366. __SetAlphaValue(fAlpha);
  367. }
  368.  
  369. bool CInstanceBase::UpdateDeleting()
  370. {
  371. Update();
  372. Transform();
  373.  
  374. IAbstractApplication& rApp=IAbstractApplication::GetSingleton();
  375.  
  376. float fAlpha = __GetAlphaValue() - (rApp.GetGlobalElapsedTime() * 1.5f);
  377. __SetAlphaValue(fAlpha);
  378.  
  379. if (fAlpha < 0.0f)
  380. return false;
  381.  
  382. return true;
  383. }
  384.  
  385. void CInstanceBase::DeleteBlendOut()
  386. {
  387. __SetBlendRenderingMode();
  388. __SetAlphaValue(1.0f);
  389. DetachTextTail();
  390.  
  391. IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
  392. rkPlayer.NotifyDeletingCharacterInstance(GetVirtualID());
  393. }
  394.  
  395. void CInstanceBase::ClearPVPKeySystem()
  396. {
  397. g_kSet_dwPVPReadyKey.clear();
  398. g_kSet_dwPVPKey.clear();
  399. g_kSet_dwGVGKey.clear();
  400. g_kSet_dwDUELKey.clear();
  401. }
  402.  
  403. void CInstanceBase::InsertPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  404. {
  405. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  406.  
  407. g_kSet_dwPVPKey.insert(dwPVPKey);
  408. }
  409.  
  410. void CInstanceBase::InsertPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  411. {
  412. DWORD dwPVPReadyKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  413.  
  414. g_kSet_dwPVPKey.insert(dwPVPReadyKey);
  415. }
  416.  
  417. void CInstanceBase::RemovePVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  418. {
  419. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  420.  
  421. g_kSet_dwPVPKey.erase(dwPVPKey);
  422. }
  423.  
  424. void CInstanceBase::InsertGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID)
  425. {
  426. DWORD dwGVGKey = __GetPVPKey(dwSrcGuildVID, dwDstGuildVID);
  427. g_kSet_dwGVGKey.insert(dwGVGKey);
  428. }
  429.  
  430. void CInstanceBase::RemoveGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID)
  431. {
  432. DWORD dwGVGKey = __GetPVPKey(dwSrcGuildVID, dwDstGuildVID);
  433. g_kSet_dwGVGKey.erase(dwGVGKey);
  434. }
  435.  
  436. void CInstanceBase::InsertDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  437. {
  438. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  439.  
  440. g_kSet_dwDUELKey.insert(dwPVPKey);
  441. }
  442.  
  443. DWORD CInstanceBase::__GetPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  444. {
  445. if (dwVIDSrc>dwVIDDst)
  446. std::swap(dwVIDSrc, dwVIDDst);
  447.  
  448. DWORD awSrc[2];
  449. awSrc[0]=dwVIDSrc;
  450. awSrc[1]=dwVIDDst;
  451.  
  452. const BYTE * s = (const BYTE *) awSrc;
  453. const BYTE * end = s + sizeof(awSrc);
  454. unsigned long h = 0;
  455.  
  456. while (s < end)
  457. {
  458. h *= 16777619;
  459. h ^= (BYTE) *(BYTE *) (s++);
  460. }
  461.  
  462. return h;
  463. }
  464.  
  465. bool CInstanceBase::__FindPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  466. {
  467. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  468.  
  469. if (g_kSet_dwPVPKey.end()==g_kSet_dwPVPKey.find(dwPVPKey))
  470. return false;
  471.  
  472. return true;
  473. }
  474.  
  475. bool CInstanceBase::__FindPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  476. {
  477. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  478.  
  479. if (g_kSet_dwPVPReadyKey.end()==g_kSet_dwPVPReadyKey.find(dwPVPKey))
  480. return false;
  481.  
  482. return true;
  483. }
  484. //±ćµĺŔü˝Ă »ó´ë ±ćµĺŔÎÁö Č®ŔÎÇҶ§.
  485. bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID)
  486. {
  487. DWORD dwGVGKey=__GetPVPKey(dwSrcGuildID, dwDstGuildID);
  488.  
  489. if (g_kSet_dwGVGKey.end()==g_kSet_dwGVGKey.find(dwGVGKey))
  490. return false;
  491.  
  492. return true;
  493. }
  494. //´ë·Ă ¸đµĺżˇĽ­´Â ´ë·Ă »ó´ë¸¸ °ř°ÝÇŇ Ľö ŔÖ´Ů.
  495. bool CInstanceBase::__FindDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  496. {
  497. DWORD dwDUELKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  498.  
  499. if (g_kSet_dwDUELKey.end()==g_kSet_dwDUELKey.find(dwDUELKey))
  500. return false;
  501.  
  502. return true;
  503. }
  504.  
  505. bool CInstanceBase::IsPVPInstance(CInstanceBase& rkInstSel)
  506. {
  507. DWORD dwVIDSrc=GetVirtualID();
  508. DWORD dwVIDDst=rkInstSel.GetVirtualID();
  509.  
  510. DWORD dwGuildIDSrc=GetGuildID();
  511. DWORD dwGuildIDDst=rkInstSel.GetGuildID();
  512.  
  513. if (GetDuelMode()) //´ë·Ă ¸đµĺŔ϶§´Â ~_~
  514. return true;
  515.  
  516. return __FindPVPKey(dwVIDSrc, dwVIDDst) || __FindGVGKey(dwGuildIDSrc, dwGuildIDDst);
  517. //__FindDUELKey(dwVIDSrc, dwVIDDst);
  518. }
  519.  
  520. const D3DXCOLOR& CInstanceBase::GetNameColor()
  521. {
  522. return GetIndexedNameColor(GetNameColorIndex());
  523. }
  524.  
  525. UINT CInstanceBase::GetNameColorIndex()
  526. {
  527. if (IsPC())
  528. {
  529. if (m_isKiller)
  530. {
  531. return NAMECOLOR_PK;
  532. }
  533.  
  534. if (__IsExistMainInstance() && !__IsMainInstance())
  535. {
  536. CInstanceBase* pkInstMain=__GetMainInstancePtr();
  537. if (!pkInstMain)
  538. {
  539. TraceError("CInstanceBase::GetNameColorIndex - MainInstance is NULL");
  540. return NAMECOLOR_PC;
  541. }
  542. DWORD dwVIDMain=pkInstMain->GetVirtualID();
  543. DWORD dwVIDSelf=GetVirtualID();
  544.  
  545. if (pkInstMain->GetDuelMode())
  546. {
  547. switch(pkInstMain->GetDuelMode())
  548. {
  549. case DUEL_CANNOTATTACK:
  550. return NAMECOLOR_PC + GetEmpireID();
  551. case DUEL_START:
  552. if(__FindDUELKey(dwVIDMain, dwVIDSelf))
  553. return NAMECOLOR_PVP;
  554. else
  555. return NAMECOLOR_PC + GetEmpireID();
  556. }
  557. }
  558.  
  559. if (pkInstMain->IsSameEmpire(*this))
  560. {
  561. if (__FindPVPKey(dwVIDMain, dwVIDSelf))
  562. {
  563. return NAMECOLOR_PVP;
  564. }
  565.  
  566. DWORD dwGuildIDMain=pkInstMain->GetGuildID();
  567. DWORD dwGuildIDSelf=GetGuildID();
  568. if (__FindGVGKey(dwGuildIDMain, dwGuildIDSelf))
  569. {
  570. return NAMECOLOR_PVP;
  571. }
  572. /*
  573. if (__FindDUELKey(dwVIDMain, dwVIDSelf))
  574. {
  575. return NAMECOLOR_PVP;
  576. }
  577. */
  578. }
  579. else
  580. {
  581. return NAMECOLOR_PVP;
  582. }
  583. }
  584.  
  585. IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
  586. if (rPlayer.IsPartyMemberByVID(GetVirtualID()))
  587. return NAMECOLOR_PARTY;
  588.  
  589. return NAMECOLOR_PC + GetEmpireID();
  590.  
  591. }
  592. else if (IsNPC())
  593. {
  594. return NAMECOLOR_NPC;
  595. }
  596. else if (IsEnemy())
  597. {
  598. return NAMECOLOR_MOB;
  599. }
  600. else if (IsPoly())
  601. {
  602. return NAMECOLOR_MOB;
  603. }
  604. else if (IsStone())
  605. {
  606. return NAMECOLOR_METIN;
  607. }
  608.  
  609.  
  610. return D3DXCOLOR(0xffffffff);
  611. }
  612.  
  613. const D3DXCOLOR& CInstanceBase::GetTitleColor()
  614. {
  615. UINT uGrade = GetAlignmentGrade();
  616. if ( uGrade >= TITLE_NUM)
  617. {
  618. static D3DXCOLOR s_kD3DXClrTitleDefault(0xffffffff);
  619. return s_kD3DXClrTitleDefault;
  620. }
  621.  
  622. return g_akD3DXClrTitle[uGrade];
  623. }
  624.  
  625. void CInstanceBase::AttachTextTail()
  626. {
  627. if (m_isTextTail)
  628. {
  629. TraceError("CInstanceBase::AttachTextTail - VID [%d] ALREADY EXIST", GetVirtualID());
  630. return;
  631. }
  632.  
  633. m_isTextTail=true;
  634.  
  635. DWORD dwVID=GetVirtualID();
  636.  
  637. float fTextTailHeight=IsMountingHorse() ? 110.0f : 10.0f;
  638.  
  639. static D3DXCOLOR s_kD3DXClrTextTail=D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
  640. CPythonTextTail::Instance().RegisterCharacterTextTail(m_dwGuildID, dwVID, s_kD3DXClrTextTail, fTextTailHeight);
  641.  
  642. // CHARACTER_LEVEL
  643. if (m_dwLevel)
  644. {
  645. UpdateTextTailLevel(m_dwLevel);
  646. }
  647. }
  648.  
  649. void CInstanceBase::DetachTextTail()
  650. {
  651. if (!m_isTextTail)
  652. return;
  653.  
  654. m_isTextTail=false;
  655. CPythonTextTail::Instance().DeleteCharacterTextTail(GetVirtualID());
  656. }
  657.  
  658. void CInstanceBase::UpdateTextTailLevel(DWORD level)
  659. {
  660. //static D3DXCOLOR s_kLevelColor = D3DXCOLOR(119.0f/255.0f, 246.0f/255.0f, 168.0f/255.0f, 1.0f);
  661. static D3DXCOLOR s_kLevelColor = D3DXCOLOR(152.0f/255.0f, 255.0f/255.0f, 51.0f/255.0f, 1.0f);
  662.  
  663. char szText[256];
  664. sprintf(szText, "[Lv %d]", level);
  665. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  666. }
  667.  
  668. void CInstanceBase::RefreshTextTail()
  669. {
  670. CPythonTextTail::Instance().SetCharacterTextTailColor(GetVirtualID(), GetNameColor());
  671.  
  672. int iAlignmentGrade = GetAlignmentGrade();
  673. if (TITLE_NONE == iAlignmentGrade)
  674. {
  675. CPythonTextTail::Instance().DetachTitle(GetVirtualID());
  676. }
  677. else
  678. {
  679. std::map<int, std::string>::iterator itor = g_TitleNameMap.find(iAlignmentGrade);
  680. if (g_TitleNameMap.end() != itor)
  681. {
  682. const std::string & c_rstrTitleName = itor->second;
  683. CPythonTextTail::Instance().AttachTitle(GetVirtualID(), c_rstrTitleName.c_str(), GetTitleColor());
  684. }
  685. }
  686. }
  687.  
  688. void CInstanceBase::RefreshTextTailTitle()
  689. {
  690. RefreshTextTail();
  691. }
  692.  
  693. // 2004.07.25.myevan.ŔĚĆĺĆ® ľČ şŮ´Â ą®Á¦ ÇŘ°á
  694. /////////////////////////////////////////////////
  695. void CInstanceBase::__ClearAffectFlagContainer()
  696. {
  697. m_kAffectFlagContainer.Clear();
  698. }
  699.  
  700. void CInstanceBase::__ClearAffects()
  701. {
  702. if (IsStone())
  703. {
  704. __StoneSmoke_Destroy();
  705. }
  706. else
  707. {
  708. for (int iAffect=0; iAffect<AFFECT_NUM; ++iAffect)
  709. {
  710. __DetachEffect(m_adwCRCAffectEffect[iAffect]);
  711. m_adwCRCAffectEffect[iAffect]=0;
  712. }
  713.  
  714. __ClearAffectFlagContainer();
  715. }
  716.  
  717. m_GraphicThingInstance.__OnClearAffects();
  718. }
  719.  
  720. /////////////////////////////////////////////////
  721.  
  722. void CInstanceBase::__SetNormalAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  723. {
  724. for (int i=0; i<CAffectFlagContainer::BIT_SIZE; ++i)
  725. {
  726. bool isOldSet=m_kAffectFlagContainer.IsSet(i);
  727. bool isNewSet=c_rkAffectFlagContainer.IsSet(i);
  728.  
  729. if (isOldSet != isNewSet)
  730. {
  731. __SetAffect(i, isNewSet);
  732.  
  733. if (isNewSet)
  734. m_GraphicThingInstance.__OnSetAffect(i);
  735. else
  736. m_GraphicThingInstance.__OnResetAffect(i);
  737. }
  738. }
  739.  
  740. m_kAffectFlagContainer.CopyInstance(c_rkAffectFlagContainer);
  741. }
  742.  
  743. void CInstanceBase::__SetStoneSmokeFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  744. {
  745. m_kAffectFlagContainer.CopyInstance(c_rkAffectFlagContainer);
  746.  
  747. DWORD eSmoke;
  748. if (m_kAffectFlagContainer.IsSet(STONE_SMOKE8))
  749. eSmoke=3;
  750. else if (m_kAffectFlagContainer.IsSet(STONE_SMOKE5)|m_kAffectFlagContainer.IsSet(STONE_SMOKE6)|m_kAffectFlagContainer.IsSet(STONE_SMOKE7))
  751. eSmoke=2;
  752. else if (m_kAffectFlagContainer.IsSet(STONE_SMOKE2)|m_kAffectFlagContainer.IsSet(STONE_SMOKE3)|m_kAffectFlagContainer.IsSet(STONE_SMOKE4))
  753. eSmoke=1;
  754. else
  755. eSmoke=0;
  756.  
  757. __StoneSmoke_Destroy();
  758. __StoneSmoke_Create(eSmoke);
  759. }
  760.  
  761. void CInstanceBase::SetAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  762. {
  763. if (IsBuilding())
  764. {
  765. return;
  766. }
  767. else if (IsStone())
  768. {
  769. __SetStoneSmokeFlagContainer(c_rkAffectFlagContainer);
  770. }
  771. else
  772. {
  773. __SetNormalAffectFlagContainer(c_rkAffectFlagContainer);
  774. }
  775. }
  776.  
  777.  
  778. void CInstanceBase::SCRIPT_SetAffect(UINT eAffect, bool isVisible)
  779. {
  780. __SetAffect(eAffect, isVisible);
  781. }
  782.  
  783. void CInstanceBase::__SetReviveInvisibilityAffect(bool isVisible)
  784. {
  785. if (isVisible)
  786. {
  787. // NOTE : Dress ¸¦ ŔÔ°í ŔÖŔ¸¸é Alpha ¸¦ łÖÁö ľĘ´Â´Ů.
  788. if (IsWearingDress())
  789. return;
  790.  
  791. m_GraphicThingInstance.BlendAlphaValue(0.5f, 1.0f);
  792. }
  793. else
  794. {
  795. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  796. }
  797. }
  798.  
  799. void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible)
  800. {
  801. if (isVisible)
  802. {
  803. // NOTE : Dress ¸¦ ŔÔ°í ŔÖŔ¸¸é Alpha ¸¦ łÖÁö ľĘ´Â´Ů.
  804. if (IsWearingDress())
  805. return;
  806.  
  807. if (__IsMainInstance() || __MainCanSeeHiddenThing())
  808. {
  809. m_GraphicThingInstance.BlendAlphaValue(0.5f, 1.0f);
  810. }
  811. else
  812. {
  813. // 2004.10.16.myevan.ŔşÇüąý żĎŔü Ĺő¸í
  814. m_GraphicThingInstance.BlendAlphaValue(0.0f, 1.0f);
  815. m_GraphicThingInstance.HideAllAttachingEffect();
  816. }
  817. }
  818. else
  819. {
  820. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  821. m_GraphicThingInstance.ShowAllAttachingEffect();
  822. }
  823. }
  824.  
  825. void CInstanceBase::__Shaman_SetParalysis(bool isParalysis)
  826. {
  827. m_GraphicThingInstance.SetParalysis(isParalysis);
  828. }
  829.  
  830.  
  831.  
  832. void CInstanceBase::__Warrior_SetGeomgyeongAffect(bool isVisible)
  833. {
  834. if (isVisible)
  835. {
  836. if (IsWearingDress())
  837. return;
  838.  
  839. if (m_kWarrior.m_dwGeomgyeongEffect)
  840. __DetachEffect(m_kWarrior.m_dwGeomgyeongEffect);
  841.  
  842. m_GraphicThingInstance.SetReachScale(1.5f);
  843. if (m_GraphicThingInstance.IsTwoHandMode())
  844. m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+WEAPON_TWOHAND);
  845. else
  846. m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+WEAPON_ONEHAND);
  847. }
  848. else
  849. {
  850. m_GraphicThingInstance.SetReachScale(1.0f);
  851.  
  852. __DetachEffect(m_kWarrior.m_dwGeomgyeongEffect);
  853. m_kWarrior.m_dwGeomgyeongEffect=0;
  854. }
  855. }
  856.  
  857. void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible)
  858. {
  859. switch (eAffect)
  860. {
  861. case AFFECT_YMIR:
  862. if (IsAffect(AFFECT_INVISIBILITY))
  863. return;
  864. break;
  865. /*
  866. case AFFECT_GWIGEOM: // Ŕü±â ĽÓĽş °ř°ÝŔ¸·Î ąŮ˛đ żąÁ¤
  867. if (isVisible)
  868. {
  869. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_ELECTRIC_HIT]);
  870. m_GraphicThingInstance.SetBattleAttachEffect(ms_adwCRCAffectEffect[EFFECT_ELECTRIC_ATTACH]);
  871. }
  872. else
  873. {
  874. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  875. m_GraphicThingInstance.SetBattleAttachEffect(0);
  876. }
  877. return;
  878. break;
  879. case AFFECT_HWAYEOM: // Č­ż° ĽÓĽş °ř°ÝŔ¸·Î ąŮ˛đ żąÁ¤
  880. if (isVisible)
  881. {
  882. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_FLAME_HIT]);
  883. m_GraphicThingInstance.SetBattleAttachEffect(ms_adwCRCAffectEffect[EFFECT_FLAME_ATTACH]);
  884. }
  885. else
  886. {
  887. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  888. m_GraphicThingInstance.SetBattleAttachEffect(0);
  889. }
  890. // Č­ż°ÂüŔş °ř°ÝÇŇ ¶§¸¸ ŔĎ˝ĂŔűŔ¸·Î Visible ÇŐ´Ď´Ů.
  891. return;
  892. break;
  893. */
  894. case AFFECT_CHEONGEUN:
  895. m_GraphicThingInstance.SetResistFallen(isVisible);
  896. break;
  897. case AFFECT_GEOMGYEONG:
  898. __Warrior_SetGeomgyeongAffect(isVisible);
  899. return;
  900. break;
  901. case AFFECT_REVIVE_INVISIBILITY:
  902. __Assassin_SetEunhyeongAffect(isVisible);
  903. break;
  904. case AFFECT_EUNHYEONG:
  905. __Assassin_SetEunhyeongAffect(isVisible);
  906. break;
  907. case AFFECT_GYEONGGONG:
  908. case AFFECT_KWAESOK:
  909. // °ć°řĽú, ÄčĽÓŔş ¶Ű¶§¸¸ Attaching ˝Ăŵ´Ď´Ů. - [levites]
  910. if (isVisible)
  911. if (!IsWalking())
  912. return;
  913. break;
  914. case AFFECT_INVISIBILITY:
  915. // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î şŻ°ć
  916. if (isVisible)
  917. {
  918. m_GraphicThingInstance.ClearAttachingEffect();
  919. __EffectContainer_Destroy();
  920. DetachTextTail();
  921. }
  922. else
  923. {
  924. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  925. AttachTextTail();
  926. RefreshTextTail();
  927. }
  928. return;
  929. break;
  930. // case AFFECT_FAINT:
  931. // m_GraphicThingInstance.SetFaint(isVisible);
  932. // break;
  933. // case AFFECT_SLEEP:
  934. // m_GraphicThingInstance.SetSleep(isVisible);
  935. // break;
  936. case AFFECT_STUN:
  937. m_GraphicThingInstance.SetSleep(isVisible);
  938. break;
  939. }
  940.  
  941. if (eAffect>=AFFECT_NUM)
  942. {
  943. TraceError("CInstanceBase[VID:%d]::SetAffect(eAffect:%d<AFFECT_NUM:%d, isVisible=%d)", GetVirtualID(), eAffect, isVisible);
  944. return;
  945. }
  946.  
  947. if (isVisible)
  948. {
  949. if (!m_adwCRCAffectEffect[eAffect])
  950. {
  951. m_adwCRCAffectEffect[eAffect]=__AttachEffect(EFFECT_AFFECT+eAffect);
  952. }
  953. }
  954. else
  955. {
  956. if (m_adwCRCAffectEffect[eAffect])
  957. {
  958. __DetachEffect(m_adwCRCAffectEffect[eAffect]);
  959. m_adwCRCAffectEffect[eAffect]=0;
  960. }
  961. }
  962. }
  963.  
  964. bool CInstanceBase::IsPossibleEmoticon()
  965. {
  966. CEffectManager& rkEftMgr=CEffectManager::Instance();
  967. for(DWORD eEmoticon = 0; eEmoticon < EMOTICON_NUM; eEmoticon++)
  968. {
  969. DWORD effectID = ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon];
  970. if( effectID && rkEftMgr.IsAliveEffect(effectID) )
  971. return false;
  972. }
  973.  
  974. if(ELTimer_GetMSec() - m_dwEmoticonTime < 1000)
  975. {
  976. TraceError("ELTimer_GetMSec() - m_dwEmoticonTime");
  977. return false;
  978. }
  979.  
  980. return true;
  981. }
  982.  
  983. void CInstanceBase::SetFishEmoticon()
  984. {
  985. SetEmoticon(EMOTICON_FISH);
  986. }
  987.  
  988. void CInstanceBase::SetEmoticon(UINT eEmoticon)
  989. {
  990. if (eEmoticon>=EMOTICON_NUM)
  991. {
  992. TraceError("CInstanceBase[VID:%d]::SetEmoticon(eEmoticon:%d<EMOTICON_NUM:%d, isVisible=%d)",
  993. GetVirtualID(), eEmoticon);
  994. return;
  995. }
  996. if (IsPossibleEmoticon())
  997. {
  998. D3DXVECTOR3 v3Pos = m_GraphicThingInstance.GetPosition();
  999. v3Pos.z += float(m_GraphicThingInstance.GetHeight());
  1000.  
  1001. //CEffectManager& rkEftMgr=CEffectManager::Instance();
  1002. CCamera * pCamera = CCameraManager::Instance().GetCurrentCamera();
  1003.  
  1004. D3DXVECTOR3 v3Dir = (pCamera->GetEye()-v3Pos)*9/10;
  1005. v3Pos = pCamera->GetEye()-v3Dir;
  1006.  
  1007. v3Pos = D3DXVECTOR3(0,0,0);
  1008. v3Pos.z += float(m_GraphicThingInstance.GetHeight());
  1009.  
  1010. //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon],v3Pos,D3DXVECTOR3(0,0,0));
  1011. m_GraphicThingInstance.AttachEffectByID(0, NULL, ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon],&v3Pos);
  1012. m_dwEmoticonTime = ELTimer_GetMSec();
  1013. }
  1014. }
  1015.  
  1016. void CInstanceBase::SetDustGap(float fDustGap)
  1017. {
  1018. ms_fDustGap=fDustGap;
  1019. }
  1020.  
  1021. void CInstanceBase::SetHorseDustGap(float fDustGap)
  1022. {
  1023. ms_fHorseDustGap=fDustGap;
  1024. }
  1025.  
  1026. void CInstanceBase::__DetachEffect(DWORD dwEID)
  1027. {
  1028. m_GraphicThingInstance.DettachEffect(dwEID);
  1029. }
  1030.  
  1031. DWORD CInstanceBase::__AttachEffect(UINT eEftType)
  1032. {
  1033. // 2004.07.17.levites.isShow¸¦ ViewFrustumCheck·Î şŻ°ć
  1034. if (IsAffect(AFFECT_INVISIBILITY))
  1035. return 0;
  1036.  
  1037. if (eEftType>=EFFECT_NUM)
  1038. return 0;
  1039.  
  1040. if (ms_astAffectEffectAttachBone[eEftType].empty())
  1041. {
  1042. return m_GraphicThingInstance.AttachEffectByID(0, NULL, ms_adwCRCAffectEffect[eEftType]);
  1043. }
  1044. else
  1045. {
  1046. std::string & rstrBoneName = ms_astAffectEffectAttachBone[eEftType];
  1047. const char * c_szBoneName;
  1048. // ľçĽŐżˇ şŮŔĎ ¶§ »çżëÇŃ´Ů.
  1049. // ŔĚ·± ˝ÄŔÇ żążÜ Ăł¸®¸¦ ÇŘłőŔş °ÍŔş Äł¸ŻĹÍ ¸¶´Ů Equip ŔÇ Bone Name ŔĚ ´Ů¸Ł±â ¶§ą®.
  1050. if (0 == rstrBoneName.compare("PART_WEAPON"))
  1051. {
  1052. if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szBoneName))
  1053. {
  1054. return m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, ms_adwCRCAffectEffect[eEftType]);
  1055. }
  1056. }
  1057. else if (0 == rstrBoneName.compare("PART_WEAPON_LEFT"))
  1058. {
  1059. if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON_LEFT, &c_szBoneName))
  1060. {
  1061. return m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, ms_adwCRCAffectEffect[eEftType]);
  1062. }
  1063. }
  1064. else
  1065. {
  1066. return m_GraphicThingInstance.AttachEffectByID(0, rstrBoneName.c_str(), ms_adwCRCAffectEffect[eEftType]);
  1067. }
  1068. }
  1069.  
  1070. return 0;
  1071. }
  1072.  
  1073. void CInstanceBase::__ComboProcess()
  1074. {
  1075. /*
  1076. DWORD dwcurComboIndex = m_GraphicThingInstance.GetComboIndex();
  1077.  
  1078. if (0 != dwcurComboIndex)
  1079. {
  1080. if (m_dwLastComboIndex != m_GraphicThingInstance.GetComboIndex())
  1081. {
  1082. if (!m_GraphicThingInstance.IsHandMode() & IsAffect(AFFECT_HWAYEOM))
  1083. {
  1084. __AttachEffect(EFFECT_FLAME_ATTACK);
  1085. }
  1086. }
  1087. }
  1088.  
  1089. m_dwLastComboIndex = dwcurComboIndex;
  1090. */
  1091. }
  1092.  
  1093. bool CInstanceBase::RegisterEffect(UINT eEftType, const char* c_szEftAttachBone, const char* c_szEftName, bool isCache)
  1094. {
  1095. if (eEftType>=EFFECT_NUM)
  1096. return false;
  1097.  
  1098. ms_astAffectEffectAttachBone[eEftType]=c_szEftAttachBone;
  1099.  
  1100. DWORD& rdwCRCEft=ms_adwCRCAffectEffect[eEftType];
  1101. if (!CEffectManager::Instance().RegisterEffect2(c_szEftName, &rdwCRCEft, isCache))
  1102. {
  1103. TraceError("CInstanceBase::RegisterEffect(eEftType=%d, c_szEftAttachBone=%s, c_szEftName=%s, isCache=%d) - Error", eEftType, c_szEftAttachBone, c_szEftName, isCache);
  1104. rdwCRCEft=0;
  1105. return false;
  1106. }
  1107.  
  1108. return true;
  1109. }
  1110.  
  1111. void CInstanceBase::RegisterTitleName(int iIndex, const char * c_szTitleName)
  1112. {
  1113. g_TitleNameMap.insert(make_pair(iIndex, c_szTitleName));
  1114. }
  1115.  
  1116. D3DXCOLOR __RGBToD3DXColoru(UINT r, UINT g, UINT b)
  1117. {
  1118. DWORD dwColor=0xff;dwColor<<=8;
  1119. dwColor|=r;dwColor<<=8;
  1120. dwColor|=g;dwColor<<=8;
  1121. dwColor|=b;
  1122.  
  1123. return D3DXCOLOR(dwColor);
  1124. }
  1125.  
  1126. bool CInstanceBase::RegisterNameColor(UINT uIndex, UINT r, UINT g, UINT b)
  1127. {
  1128. if (uIndex>=NAMECOLOR_NUM)
  1129. return false;
  1130.  
  1131. g_akD3DXClrName[uIndex]=__RGBToD3DXColoru(r, g, b);
  1132. return true;
  1133. }
  1134.  
  1135. bool CInstanceBase::RegisterTitleColor(UINT uIndex, UINT r, UINT g, UINT b)
  1136. {
  1137. if (uIndex>=TITLE_NUM)
  1138. return false;
  1139.  
  1140. g_akD3DXClrTitle[uIndex]=__RGBToD3DXColoru(r, g, b);
  1141. return true;
  1142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement