Advertisement
Guest User

Untitled

a guest
Jul 4th, 2017
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.93 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. #ifdef ENABLE_TITLE_SYSTEM
  43. D3DXCOLOR g_akD3DXClrTitlePrestige[CInstanceBase::TITLE_NUM_PRESTIGE];
  44. #endif
  45. D3DXCOLOR g_akD3DXClrName[CInstanceBase::NAMECOLOR_NUM];
  46.  
  47. std::map<int, std::string> g_TitleNameMap;
  48. #ifdef ENABLE_TITLE_SYSTEM
  49. std::map<int, std::string> g_TitlePrestigeNameMap;
  50. #endif
  51. std::set<DWORD> g_kSet_dwPVPReadyKey;
  52. std::set<DWORD> g_kSet_dwPVPKey;
  53. std::set<DWORD> g_kSet_dwGVGKey;
  54. std::set<DWORD> g_kSet_dwDUELKey;
  55.  
  56. bool g_isEmpireNameMode=false;
  57.  
  58. void CInstanceBase::SetEmpireNameMode(bool isEnable)
  59. {
  60. g_isEmpireNameMode=isEnable;
  61.  
  62. if (isEnable)
  63. {
  64. g_akD3DXClrName[NAMECOLOR_MOB]=g_akD3DXClrName[NAMECOLOR_EMPIRE_MOB];
  65. g_akD3DXClrName[NAMECOLOR_NPC]=g_akD3DXClrName[NAMECOLOR_EMPIRE_NPC];
  66. g_akD3DXClrName[NAMECOLOR_PC]=g_akD3DXClrName[NAMECOLOR_NORMAL_PC];
  67.  
  68. for (UINT uEmpire=1; uEmpire<EMPIRE_NUM; ++uEmpire)
  69. g_akD3DXClrName[NAMECOLOR_PC+uEmpire]=g_akD3DXClrName[NAMECOLOR_EMPIRE_PC+uEmpire];
  70.  
  71. }
  72. else
  73. {
  74. g_akD3DXClrName[NAMECOLOR_MOB]=g_akD3DXClrName[NAMECOLOR_NORMAL_MOB];
  75. g_akD3DXClrName[NAMECOLOR_NPC]=g_akD3DXClrName[NAMECOLOR_NORMAL_NPC];
  76.  
  77. for (UINT uEmpire=0; uEmpire<EMPIRE_NUM; ++uEmpire)
  78. g_akD3DXClrName[NAMECOLOR_PC+uEmpire]=g_akD3DXClrName[NAMECOLOR_NORMAL_PC];
  79. }
  80. }
  81.  
  82. const D3DXCOLOR& CInstanceBase::GetIndexedNameColor(UINT eNameColor)
  83. {
  84. if (eNameColor>=NAMECOLOR_NUM)
  85. {
  86. static D3DXCOLOR s_kD3DXClrNameDefault(0xffffffff);
  87. return s_kD3DXClrNameDefault;
  88. }
  89.  
  90. return g_akD3DXClrName[eNameColor];
  91. }
  92.  
  93. void CInstanceBase::AddDamageEffect(DWORD damage,BYTE flag,BOOL bSelf,BOOL bTarget)
  94. {
  95. if(CPythonSystem::Instance().IsShowDamage())
  96. {
  97. SEffectDamage sDamage;
  98. sDamage.bSelf = bSelf;
  99. sDamage.bTarget = bTarget;
  100. sDamage.damage = damage;
  101. sDamage.flag = flag;
  102. m_DamageQueue.push_back(sDamage);
  103. }
  104. }
  105.  
  106. void CInstanceBase::ProcessDamage()
  107. {
  108. if(m_DamageQueue.empty())
  109. return;
  110.  
  111. SEffectDamage sDamage = m_DamageQueue.front();
  112.  
  113. m_DamageQueue.pop_front();
  114.  
  115. DWORD damage = sDamage.damage;
  116. BYTE flag = sDamage.flag;
  117. BOOL bSelf = sDamage.bSelf;
  118. BOOL bTarget = sDamage.bTarget;
  119.  
  120. CCamera * pCamera = CCameraManager::Instance().GetCurrentCamera();
  121. float cameraAngle = GetDegreeFromPosition2(pCamera->GetTarget().x,pCamera->GetTarget().y,pCamera->GetEye().x,pCamera->GetEye().y);
  122.  
  123. DWORD FONT_WIDTH = 30;
  124.  
  125. CEffectManager& rkEftMgr=CEffectManager::Instance();
  126.  
  127. D3DXVECTOR3 v3Pos = m_GraphicThingInstance.GetPosition();
  128. v3Pos.z += float(m_GraphicThingInstance.GetHeight());
  129.  
  130. D3DXVECTOR3 v3Rot = D3DXVECTOR3(0.0f, 0.0f, cameraAngle);
  131.  
  132. if ( (flag & DAMAGE_DODGE) || (flag & DAMAGE_BLOCK) )
  133. {
  134. if(bSelf)
  135. rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_MISS],v3Pos,v3Rot);
  136. else
  137. rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_TARGETMISS],v3Pos,v3Rot);
  138. //__AttachEffect(EFFECT_DAMAGE_MISS);
  139. return;
  140. }
  141. else if (flag & DAMAGE_CRITICAL)
  142. {
  143. //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot);
  144. //return; 숫자도 표시.
  145. }
  146.  
  147. string strDamageType;
  148. DWORD rdwCRCEft = 0;
  149. /*
  150. if ( (flag & DAMAGE_POISON) )
  151. {
  152. strDamageType = "poison_";
  153. rdwCRCEft = EFFECT_DAMAGE_POISON;
  154. }
  155. else
  156. */
  157. {
  158. if(bSelf)
  159. {
  160. strDamageType = "damage_";
  161. if(m_bDamageEffectType==0)
  162. rdwCRCEft = EFFECT_DAMAGE_SELFDAMAGE;
  163. else
  164. rdwCRCEft = EFFECT_DAMAGE_SELFDAMAGE2;
  165. m_bDamageEffectType = !m_bDamageEffectType;
  166. }
  167. else if(bTarget == false)
  168. {
  169. strDamageType = "nontarget_";
  170. rdwCRCEft = EFFECT_DAMAGE_NOT_TARGET;
  171. return;//현재 적용 안됨.
  172. }
  173. else
  174. {
  175. strDamageType = "target_";
  176. rdwCRCEft = EFFECT_DAMAGE_TARGET;
  177. }
  178. }
  179.  
  180. DWORD index = 0;
  181. DWORD num = 0;
  182. vector<string> textures;
  183. while(damage>0)
  184. {
  185. if(index > 7)
  186. {
  187. TraceError("ProcessDamage무한루프 가능성");
  188. break;
  189. }
  190. num = damage%10;
  191. damage /= 10;
  192. char numBuf[MAX_PATH];
  193. sprintf(numBuf,"%d.dds",num);
  194. textures.push_back("d:/ymir work/effect/affect/damagevalue/"+strDamageType+numBuf);
  195.  
  196. rkEftMgr.SetEffectTextures(ms_adwCRCAffectEffect[rdwCRCEft],textures);
  197.  
  198. D3DXMATRIX matrix,matTrans;
  199. D3DXMatrixIdentity(&matrix);
  200. matrix._41 = v3Pos.x;
  201. matrix._42 = v3Pos.y;
  202. matrix._43 = v3Pos.z;
  203. D3DXMatrixTranslation(&matrix,v3Pos.x,v3Pos.y,v3Pos.z);
  204. D3DXMatrixMultiply(&matrix,&pCamera->GetInverseViewMatrix(),&matrix);
  205. D3DXMatrixTranslation(&matTrans,FONT_WIDTH*index,0,0);
  206. matTrans._41 = -matTrans._41;
  207. matrix = matTrans*matrix;
  208. D3DXMatrixMultiply(&matrix,&pCamera->GetViewMatrix(),&matrix);
  209.  
  210. rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[rdwCRCEft],D3DXVECTOR3(matrix._41,matrix._42,matrix._43)
  211. ,v3Rot);
  212.  
  213. textures.clear();
  214.  
  215. index++;
  216. }
  217. }
  218.  
  219. void CInstanceBase::AttachSpecialEffect(DWORD effect)
  220. {
  221. __AttachEffect(effect);
  222. }
  223.  
  224. void CInstanceBase::LevelUp()
  225. {
  226. __AttachEffect(EFFECT_LEVELUP);
  227. }
  228.  
  229. void CInstanceBase::SkillUp()
  230. {
  231. __AttachEffect(EFFECT_SKILLUP);
  232. }
  233.  
  234. void CInstanceBase::CreateSpecialEffect(DWORD iEffectIndex)
  235. {
  236. const D3DXMATRIX & c_rmatGlobal = m_GraphicThingInstance.GetTransform();
  237.  
  238. DWORD dwEffectIndex = CEffectManager::Instance().GetEmptyIndex();
  239. DWORD dwEffectCRC = ms_adwCRCAffectEffect[iEffectIndex];
  240. CEffectManager::Instance().CreateEffectInstance(dwEffectIndex, dwEffectCRC);
  241. CEffectManager::Instance().SelectEffectInstance(dwEffectIndex);
  242. CEffectManager::Instance().SetEffectInstanceGlobalMatrix(c_rmatGlobal);
  243. }
  244.  
  245. void CInstanceBase::__EffectContainer_Destroy()
  246. {
  247. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  248.  
  249. SEffectContainer::Dict::iterator i;
  250. for (i=rkDctEftID.begin(); i!=rkDctEftID.end(); ++i)
  251. __DetachEffect(i->second);
  252.  
  253. rkDctEftID.clear();
  254. }
  255.  
  256. void CInstanceBase::__EffectContainer_Initialize()
  257. {
  258. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  259. rkDctEftID.clear();
  260. }
  261.  
  262. CInstanceBase::SEffectContainer::Dict& CInstanceBase::__EffectContainer_GetDict()
  263. {
  264. return m_kEffectContainer.m_kDct_dwEftID;
  265. }
  266.  
  267. // Return value 를 boolean 에서 ID 로 바꿉니다
  268. DWORD CInstanceBase::__EffectContainer_AttachEffect(DWORD dwEftKey)
  269. {
  270. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  271. SEffectContainer::Dict::iterator f=rkDctEftID.find(dwEftKey);
  272. if (rkDctEftID.end()!=f)
  273. return 0;
  274.  
  275. DWORD dwEftID=__AttachEffect(dwEftKey);
  276. rkDctEftID.insert(SEffectContainer::Dict::value_type(dwEftKey, dwEftID));
  277. return dwEftID;
  278. }
  279.  
  280.  
  281. void CInstanceBase::__EffectContainer_DetachEffect(DWORD dwEftKey)
  282. {
  283. SEffectContainer::Dict& rkDctEftID=__EffectContainer_GetDict();
  284. SEffectContainer::Dict::iterator f=rkDctEftID.find(dwEftKey);
  285. if (rkDctEftID.end()==f)
  286. return;
  287.  
  288. __DetachEffect(f->second);
  289.  
  290. rkDctEftID.erase(f);
  291. }
  292.  
  293. void CInstanceBase::__AttachEmpireEffect(DWORD eEmpire)
  294. {
  295. if (!__IsExistMainInstance())
  296. return;
  297.  
  298. CInstanceBase* pkInstMain=__GetMainInstancePtr();
  299.  
  300. if (IsWarp())
  301. return;
  302. if (IsObject())
  303. return;
  304. if (IsFlag())
  305. return;
  306. if (IsResource())
  307. return;
  308.  
  309. if (pkInstMain->IsGameMaster())
  310. {
  311. }
  312. else
  313. {
  314. if (pkInstMain->IsSameEmpire(*this))
  315. return;
  316.  
  317. // HIDE_OTHER_EMPIRE_EUNHYEONG_ASSASSIN
  318. if (IsAffect(AFFECT_EUNHYEONG))
  319. return;
  320. // END_OF_HIDE_OTHER_EMPIRE_EUNHYEONG_ASSASSIN
  321. }
  322.  
  323. if (IsGameMaster())
  324. return;
  325.  
  326. __EffectContainer_AttachEffect(EFFECT_EMPIRE+eEmpire);
  327. }
  328.  
  329. void CInstanceBase::__AttachSelectEffect()
  330. {
  331. __EffectContainer_AttachEffect(EFFECT_SELECT);
  332. }
  333.  
  334. void CInstanceBase::__DetachSelectEffect()
  335. {
  336. __EffectContainer_DetachEffect(EFFECT_SELECT);
  337. }
  338.  
  339. void CInstanceBase::__AttachTargetEffect()
  340. {
  341. __EffectContainer_AttachEffect(EFFECT_TARGET);
  342. }
  343.  
  344. void CInstanceBase::__DetachTargetEffect()
  345. {
  346. __EffectContainer_DetachEffect(EFFECT_TARGET);
  347. }
  348.  
  349.  
  350. void CInstanceBase::__StoneSmoke_Inialize()
  351. {
  352. m_kStoneSmoke.m_dwEftID=0;
  353. }
  354.  
  355. void CInstanceBase::__StoneSmoke_Destroy()
  356. {
  357. if (!m_kStoneSmoke.m_dwEftID)
  358. return;
  359.  
  360. __DetachEffect(m_kStoneSmoke.m_dwEftID);
  361. m_kStoneSmoke.m_dwEftID=0;
  362. }
  363.  
  364. void CInstanceBase::__StoneSmoke_Create(DWORD eSmoke)
  365. {
  366. m_kStoneSmoke.m_dwEftID=m_GraphicThingInstance.AttachSmokeEffect(eSmoke);
  367. }
  368.  
  369. void CInstanceBase::SetAlpha(float fAlpha)
  370. {
  371. __SetBlendRenderingMode();
  372. __SetAlphaValue(fAlpha);
  373. }
  374.  
  375. bool CInstanceBase::UpdateDeleting()
  376. {
  377. Update();
  378. Transform();
  379.  
  380. IAbstractApplication& rApp=IAbstractApplication::GetSingleton();
  381.  
  382. float fAlpha = __GetAlphaValue() - (rApp.GetGlobalElapsedTime() * 1.5f);
  383. __SetAlphaValue(fAlpha);
  384.  
  385. if (fAlpha < 0.0f)
  386. return false;
  387.  
  388. return true;
  389. }
  390.  
  391. void CInstanceBase::DeleteBlendOut()
  392. {
  393. __SetBlendRenderingMode();
  394. __SetAlphaValue(1.0f);
  395. DetachTextTail();
  396.  
  397. IAbstractPlayer& rkPlayer=IAbstractPlayer::GetSingleton();
  398. rkPlayer.NotifyDeletingCharacterInstance(GetVirtualID());
  399. }
  400.  
  401. void CInstanceBase::ClearPVPKeySystem()
  402. {
  403. g_kSet_dwPVPReadyKey.clear();
  404. g_kSet_dwPVPKey.clear();
  405. g_kSet_dwGVGKey.clear();
  406. g_kSet_dwDUELKey.clear();
  407. }
  408.  
  409. void CInstanceBase::InsertPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  410. {
  411. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  412.  
  413. g_kSet_dwPVPKey.insert(dwPVPKey);
  414. }
  415.  
  416. void CInstanceBase::InsertPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  417. {
  418. DWORD dwPVPReadyKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  419.  
  420. g_kSet_dwPVPKey.insert(dwPVPReadyKey);
  421. }
  422.  
  423. void CInstanceBase::RemovePVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  424. {
  425. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  426.  
  427. g_kSet_dwPVPKey.erase(dwPVPKey);
  428. }
  429.  
  430. void CInstanceBase::InsertGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID)
  431. {
  432. DWORD dwGVGKey = __GetPVPKey(dwSrcGuildVID, dwDstGuildVID);
  433. g_kSet_dwGVGKey.insert(dwGVGKey);
  434. }
  435.  
  436. void CInstanceBase::RemoveGVGKey(DWORD dwSrcGuildVID, DWORD dwDstGuildVID)
  437. {
  438. DWORD dwGVGKey = __GetPVPKey(dwSrcGuildVID, dwDstGuildVID);
  439. g_kSet_dwGVGKey.erase(dwGVGKey);
  440. }
  441.  
  442. void CInstanceBase::InsertDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  443. {
  444. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  445.  
  446. g_kSet_dwDUELKey.insert(dwPVPKey);
  447. }
  448.  
  449. DWORD CInstanceBase::__GetPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  450. {
  451. if (dwVIDSrc>dwVIDDst)
  452. std::swap(dwVIDSrc, dwVIDDst);
  453.  
  454. DWORD awSrc[2];
  455. awSrc[0]=dwVIDSrc;
  456. awSrc[1]=dwVIDDst;
  457.  
  458. const BYTE * s = (const BYTE *) awSrc;
  459. const BYTE * end = s + sizeof(awSrc);
  460. unsigned long h = 0;
  461.  
  462. while (s < end)
  463. {
  464. h *= 16777619;
  465. h ^= (BYTE) *(BYTE *) (s++);
  466. }
  467.  
  468. return h;
  469. }
  470.  
  471. bool CInstanceBase::__FindPVPKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  472. {
  473. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  474.  
  475. if (g_kSet_dwPVPKey.end()==g_kSet_dwPVPKey.find(dwPVPKey))
  476. return false;
  477.  
  478. return true;
  479. }
  480.  
  481. bool CInstanceBase::__FindPVPReadyKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  482. {
  483. DWORD dwPVPKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  484.  
  485. if (g_kSet_dwPVPReadyKey.end()==g_kSet_dwPVPReadyKey.find(dwPVPKey))
  486. return false;
  487.  
  488. return true;
  489. }
  490. //길드전시 상대 길드인지 확인할때.
  491. bool CInstanceBase::__FindGVGKey(DWORD dwSrcGuildID, DWORD dwDstGuildID)
  492. {
  493. DWORD dwGVGKey=__GetPVPKey(dwSrcGuildID, dwDstGuildID);
  494.  
  495. if (g_kSet_dwGVGKey.end()==g_kSet_dwGVGKey.find(dwGVGKey))
  496. return false;
  497.  
  498. return true;
  499. }
  500. //대련 모드에서는 대련 상대만 공격할 수 있다.
  501. bool CInstanceBase::__FindDUELKey(DWORD dwVIDSrc, DWORD dwVIDDst)
  502. {
  503. DWORD dwDUELKey=__GetPVPKey(dwVIDSrc, dwVIDDst);
  504.  
  505. if (g_kSet_dwDUELKey.end()==g_kSet_dwDUELKey.find(dwDUELKey))
  506. return false;
  507.  
  508. return true;
  509. }
  510.  
  511. bool CInstanceBase::IsPVPInstance(CInstanceBase& rkInstSel)
  512. {
  513. DWORD dwVIDSrc=GetVirtualID();
  514. DWORD dwVIDDst=rkInstSel.GetVirtualID();
  515.  
  516. DWORD dwGuildIDSrc=GetGuildID();
  517. DWORD dwGuildIDDst=rkInstSel.GetGuildID();
  518.  
  519. if (GetDuelMode()) //대련 모드일때는 ~_~
  520. return true;
  521.  
  522. return __FindPVPKey(dwVIDSrc, dwVIDDst) || __FindGVGKey(dwGuildIDSrc, dwGuildIDDst);
  523. //__FindDUELKey(dwVIDSrc, dwVIDDst);
  524. }
  525.  
  526. const D3DXCOLOR& CInstanceBase::GetNameColor()
  527. {
  528. return GetIndexedNameColor(GetNameColorIndex());
  529. }
  530.  
  531. UINT CInstanceBase::GetNameColorIndex()
  532. {
  533. if (IsPC())
  534. {
  535. if (m_isKiller)
  536. {
  537. return NAMECOLOR_PK;
  538. }
  539.  
  540. if (__IsExistMainInstance() && !__IsMainInstance())
  541. {
  542. CInstanceBase* pkInstMain=__GetMainInstancePtr();
  543. if (!pkInstMain)
  544. {
  545. TraceError("CInstanceBase::GetNameColorIndex - MainInstance is NULL");
  546. return NAMECOLOR_PC;
  547. }
  548. DWORD dwVIDMain=pkInstMain->GetVirtualID();
  549. DWORD dwVIDSelf=GetVirtualID();
  550.  
  551. if (pkInstMain->GetDuelMode())
  552. {
  553. switch(pkInstMain->GetDuelMode())
  554. {
  555. case DUEL_CANNOTATTACK:
  556. return NAMECOLOR_PC + GetEmpireID();
  557. case DUEL_START:
  558. if(__FindDUELKey(dwVIDMain, dwVIDSelf))
  559. return NAMECOLOR_PVP;
  560. else
  561. return NAMECOLOR_PC + GetEmpireID();
  562. }
  563. }
  564.  
  565. if (pkInstMain->IsSameEmpire(*this))
  566. {
  567. if (__FindPVPKey(dwVIDMain, dwVIDSelf))
  568. {
  569. return NAMECOLOR_PVP;
  570. }
  571.  
  572. DWORD dwGuildIDMain=pkInstMain->GetGuildID();
  573. DWORD dwGuildIDSelf=GetGuildID();
  574. if (__FindGVGKey(dwGuildIDMain, dwGuildIDSelf))
  575. {
  576. return NAMECOLOR_PVP;
  577. }
  578. /*
  579. if (__FindDUELKey(dwVIDMain, dwVIDSelf))
  580. {
  581. return NAMECOLOR_PVP;
  582. }
  583. */
  584. }
  585. else
  586. {
  587. return NAMECOLOR_PVP;
  588. }
  589. }
  590.  
  591. IAbstractPlayer& rPlayer=IAbstractPlayer::GetSingleton();
  592. if (rPlayer.IsPartyMemberByVID(GetVirtualID()))
  593. return NAMECOLOR_PARTY;
  594.  
  595. return NAMECOLOR_PC + GetEmpireID();
  596.  
  597. }
  598. else if (IsNPC())
  599. {
  600. return NAMECOLOR_NPC;
  601. }
  602. else if (IsEnemy())
  603. {
  604. return NAMECOLOR_MOB;
  605. }
  606. else if (IsPoly())
  607. {
  608. return NAMECOLOR_MOB;
  609. }
  610. else if (IsStone())
  611. {
  612. return NAMECOLOR_METIN;
  613. }
  614.  
  615.  
  616. return D3DXCOLOR(0xffffffff);
  617. }
  618.  
  619. const D3DXCOLOR& CInstanceBase::GetTitleColor()
  620. {
  621. UINT uGrade = GetAlignmentGrade();
  622. if ( uGrade >= TITLE_NUM)
  623. {
  624. static D3DXCOLOR s_kD3DXClrTitleDefault(0xffffffff);
  625. return s_kD3DXClrTitleDefault;
  626. }
  627.  
  628. return g_akD3DXClrTitle[uGrade];
  629. }
  630.  
  631. #ifdef ENABLE_TITLE_SYSTEM
  632. const D3DXCOLOR& CInstanceBase::GetTitlePrestigeColor()
  633. {
  634. UINT uGradePrestige = GetPrestigeGrade();
  635. if ( uGradePrestige >= TITLE_NUM_PRESTIGE)
  636. {
  637. static D3DXCOLOR s_kD3DXClrTitlePrestigeDefault(0xffffffff);
  638. return s_kD3DXClrTitlePrestigeDefault;
  639. }
  640.  
  641. return g_akD3DXClrTitlePrestige[uGradePrestige];
  642. }
  643. #endif
  644.  
  645. void CInstanceBase::AttachTextTail()
  646. {
  647. if (m_isTextTail)
  648. {
  649. TraceError("CInstanceBase::AttachTextTail - VID [%d] ALREADY EXIST", GetVirtualID());
  650. return;
  651. }
  652.  
  653. m_isTextTail=true;
  654.  
  655. DWORD dwVID=GetVirtualID();
  656.  
  657. float fTextTailHeight=IsMountingHorse() ? 110.0f : 10.0f;
  658.  
  659. static D3DXCOLOR s_kD3DXClrTextTail=D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
  660. CPythonTextTail::Instance().RegisterCharacterTextTail(m_dwGuildID, dwVID, s_kD3DXClrTextTail, fTextTailHeight);
  661.  
  662. // CHARACTER_LEVEL
  663. if (m_dwLevel)
  664. {
  665. UpdateTextTailLevel(m_dwLevel);
  666. }
  667. }
  668.  
  669. void CInstanceBase::DetachTextTail()
  670. {
  671. if (!m_isTextTail)
  672. return;
  673.  
  674. m_isTextTail=false;
  675. CPythonTextTail::Instance().DeleteCharacterTextTail(GetVirtualID());
  676. }
  677.  
  678. void CInstanceBase::UpdateTextTailLevel(DWORD level)
  679. {
  680. //static D3DXCOLOR s_kLevelColor = D3DXCOLOR(119.0f/255.0f, 246.0f/255.0f, 168.0f/255.0f, 1.0f);
  681. static D3DXCOLOR s_kLevelColor = D3DXCOLOR(152.0f/255.0f, 255.0f/255.0f, 51.0f/255.0f, 1.0f);
  682.  
  683. char szText[256];
  684. sprintf(szText, "[Lv %d]", level);
  685. CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
  686. }
  687.  
  688. void CInstanceBase::RefreshTextTail()
  689. {
  690. CPythonTextTail::Instance().SetCharacterTextTailColor(GetVirtualID(), GetNameColor());
  691.  
  692. int iAlignmentGrade = GetAlignmentGrade();
  693. if (TITLE_NONE == iAlignmentGrade)
  694. {
  695. CPythonTextTail::Instance().DetachTitle(GetVirtualID());
  696. }
  697. else
  698. {
  699. std::map<int, std::string>::iterator itor = g_TitleNameMap.find(iAlignmentGrade);
  700. if (g_TitleNameMap.end() != itor)
  701. {
  702. const std::string & c_rstrTitleName = itor->second;
  703. CPythonTextTail::Instance().AttachTitle(GetVirtualID(), c_rstrTitleName.c_str(), GetTitleColor());
  704. }
  705. }
  706. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  707. #ifdef ENABLE_TITLE_SYSTEM
  708. int iPrestigeGrade = GetPrestigeGrade();
  709.  
  710. if (TITLE_NONE_PRESTIGE == iPrestigeGrade)
  711. {
  712. CPythonTextTail::Instance().DetachPrestige_(GetVirtualID());
  713. }
  714. else
  715. {
  716. std::map<int, std::string>::iterator itor2_vegas = g_TitlePrestigeNameMap.find(iPrestigeGrade);
  717. if (g_TitlePrestigeNameMap.end() != itor2_vegas)
  718. {
  719. const std::string & c_rstrTitlePrestigeName = itor2_vegas->second;
  720. CPythonTextTail::Instance().AttachPrestige_(GetVirtualID(), c_rstrTitlePrestigeName.c_str(), GetTitlePrestigeColor());
  721. }
  722. }
  723. #endif
  724.  
  725. void CInstanceBase::RefreshTextTailTitle()
  726. {
  727. RefreshTextTail();
  728. }
  729.  
  730. // 2004.07.25.myevan.이펙트 안 붙는 문제 해결
  731. /////////////////////////////////////////////////
  732. void CInstanceBase::__ClearAffectFlagContainer()
  733. {
  734. m_kAffectFlagContainer.Clear();
  735. }
  736.  
  737. void CInstanceBase::__ClearAffects()
  738. {
  739. if (IsStone())
  740. {
  741. __StoneSmoke_Destroy();
  742. }
  743. else
  744. {
  745. for (int iAffect=0; iAffect<AFFECT_NUM; ++iAffect)
  746. {
  747. __DetachEffect(m_adwCRCAffectEffect[iAffect]);
  748. m_adwCRCAffectEffect[iAffect]=0;
  749. }
  750.  
  751. __ClearAffectFlagContainer();
  752. }
  753.  
  754. m_GraphicThingInstance.__OnClearAffects();
  755. }
  756.  
  757. /////////////////////////////////////////////////
  758.  
  759. void CInstanceBase::__SetNormalAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  760. {
  761. for (int i=0; i<CAffectFlagContainer::BIT_SIZE; ++i)
  762. {
  763. bool isOldSet=m_kAffectFlagContainer.IsSet(i);
  764. bool isNewSet=c_rkAffectFlagContainer.IsSet(i);
  765.  
  766. if (isOldSet != isNewSet)
  767. {
  768. __SetAffect(i, isNewSet);
  769.  
  770. if (isNewSet)
  771. m_GraphicThingInstance.__OnSetAffect(i);
  772. else
  773. m_GraphicThingInstance.__OnResetAffect(i);
  774. }
  775. }
  776.  
  777. m_kAffectFlagContainer.CopyInstance(c_rkAffectFlagContainer);
  778. }
  779.  
  780. void CInstanceBase::__SetStoneSmokeFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  781. {
  782. m_kAffectFlagContainer.CopyInstance(c_rkAffectFlagContainer);
  783.  
  784. DWORD eSmoke;
  785. if (m_kAffectFlagContainer.IsSet(STONE_SMOKE8))
  786. eSmoke=3;
  787. else if (m_kAffectFlagContainer.IsSet(STONE_SMOKE5)|m_kAffectFlagContainer.IsSet(STONE_SMOKE6)|m_kAffectFlagContainer.IsSet(STONE_SMOKE7))
  788. eSmoke=2;
  789. else if (m_kAffectFlagContainer.IsSet(STONE_SMOKE2)|m_kAffectFlagContainer.IsSet(STONE_SMOKE3)|m_kAffectFlagContainer.IsSet(STONE_SMOKE4))
  790. eSmoke=1;
  791. else
  792. eSmoke=0;
  793.  
  794. __StoneSmoke_Destroy();
  795. __StoneSmoke_Create(eSmoke);
  796. }
  797.  
  798. void CInstanceBase::SetAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
  799. {
  800. if (IsBuilding())
  801. {
  802. return;
  803. }
  804. else if (IsStone())
  805. {
  806. __SetStoneSmokeFlagContainer(c_rkAffectFlagContainer);
  807. }
  808. else
  809. {
  810. __SetNormalAffectFlagContainer(c_rkAffectFlagContainer);
  811. }
  812. }
  813.  
  814.  
  815. void CInstanceBase::SCRIPT_SetAffect(UINT eAffect, bool isVisible)
  816. {
  817. __SetAffect(eAffect, isVisible);
  818. }
  819.  
  820. void CInstanceBase::__SetReviveInvisibilityAffect(bool isVisible)
  821. {
  822. if (isVisible)
  823. {
  824. // NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다.
  825. if (IsWearingDress())
  826. return;
  827.  
  828. m_GraphicThingInstance.BlendAlphaValue(0.5f, 1.0f);
  829. }
  830. else
  831. {
  832. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  833. }
  834. }
  835.  
  836. void CInstanceBase::__Assassin_SetEunhyeongAffect(bool isVisible)
  837. {
  838. if (isVisible)
  839. {
  840. // NOTE : Dress 를 입고 있으면 Alpha 를 넣지 않는다.
  841. if (IsWearingDress())
  842. return;
  843.  
  844. if (__IsMainInstance() || __MainCanSeeHiddenThing())
  845. {
  846. m_GraphicThingInstance.BlendAlphaValue(0.5f, 1.0f);
  847. }
  848. else
  849. {
  850. // 2004.10.16.myevan.은형법 완전 투명
  851. m_GraphicThingInstance.BlendAlphaValue(0.0f, 1.0f);
  852. m_GraphicThingInstance.HideAllAttachingEffect();
  853. }
  854. }
  855. else
  856. {
  857. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  858. m_GraphicThingInstance.ShowAllAttachingEffect();
  859. }
  860. }
  861.  
  862. void CInstanceBase::__Shaman_SetParalysis(bool isParalysis)
  863. {
  864. m_GraphicThingInstance.SetParalysis(isParalysis);
  865. }
  866.  
  867.  
  868.  
  869. void CInstanceBase::__Warrior_SetGeomgyeongAffect(bool isVisible)
  870. {
  871. if (isVisible)
  872. {
  873. if (IsWearingDress())
  874. return;
  875.  
  876. if (m_kWarrior.m_dwGeomgyeongEffect)
  877. __DetachEffect(m_kWarrior.m_dwGeomgyeongEffect);
  878.  
  879. m_GraphicThingInstance.SetReachScale(1.5f);
  880. if (m_GraphicThingInstance.IsTwoHandMode())
  881. m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+WEAPON_TWOHAND);
  882. else
  883. m_kWarrior.m_dwGeomgyeongEffect=__AttachEffect(EFFECT_WEAPON+WEAPON_ONEHAND);
  884. }
  885. else
  886. {
  887. m_GraphicThingInstance.SetReachScale(1.0f);
  888.  
  889. __DetachEffect(m_kWarrior.m_dwGeomgyeongEffect);
  890. m_kWarrior.m_dwGeomgyeongEffect=0;
  891. }
  892. }
  893.  
  894. void CInstanceBase::__SetAffect(UINT eAffect, bool isVisible)
  895. {
  896. switch (eAffect)
  897. {
  898. case AFFECT_YMIR:
  899. if (IsAffect(AFFECT_INVISIBILITY))
  900. return;
  901. break;
  902. /*
  903. case AFFECT_GWIGEOM: // 전기 속성 공격으로 바뀔 예정
  904. if (isVisible)
  905. {
  906. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_ELECTRIC_HIT]);
  907. m_GraphicThingInstance.SetBattleAttachEffect(ms_adwCRCAffectEffect[EFFECT_ELECTRIC_ATTACH]);
  908. }
  909. else
  910. {
  911. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  912. m_GraphicThingInstance.SetBattleAttachEffect(0);
  913. }
  914. return;
  915. break;
  916. case AFFECT_HWAYEOM: // 화염 속성 공격으로 바뀔 예정
  917. if (isVisible)
  918. {
  919. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_FLAME_HIT]);
  920. m_GraphicThingInstance.SetBattleAttachEffect(ms_adwCRCAffectEffect[EFFECT_FLAME_ATTACH]);
  921. }
  922. else
  923. {
  924. m_GraphicThingInstance.SetBattleHitEffect(ms_adwCRCAffectEffect[EFFECT_HIT]);
  925. m_GraphicThingInstance.SetBattleAttachEffect(0);
  926. }
  927. // 화염참은 공격할 때만 일시적으로 Visible 합니다.
  928. return;
  929. break;
  930. */
  931. case AFFECT_CHEONGEUN:
  932. m_GraphicThingInstance.SetResistFallen(isVisible);
  933. break;
  934. case AFFECT_GEOMGYEONG:
  935. __Warrior_SetGeomgyeongAffect(isVisible);
  936. return;
  937. break;
  938. case AFFECT_REVIVE_INVISIBILITY:
  939. __Assassin_SetEunhyeongAffect(isVisible);
  940. break;
  941. case AFFECT_EUNHYEONG:
  942. __Assassin_SetEunhyeongAffect(isVisible);
  943. break;
  944. case AFFECT_GYEONGGONG:
  945. case AFFECT_KWAESOK:
  946. // 경공술, 쾌속은 뛸때만 Attaching 시킵니다. - [levites]
  947. if (isVisible)
  948. if (!IsWalking())
  949. return;
  950. break;
  951. case AFFECT_INVISIBILITY:
  952. // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
  953. if (isVisible)
  954. {
  955. m_GraphicThingInstance.ClearAttachingEffect();
  956. __EffectContainer_Destroy();
  957. DetachTextTail();
  958. }
  959. else
  960. {
  961. m_GraphicThingInstance.BlendAlphaValue(1.0f, 1.0f);
  962. AttachTextTail();
  963. RefreshTextTail();
  964. }
  965. return;
  966. break;
  967. // case AFFECT_FAINT:
  968. // m_GraphicThingInstance.SetFaint(isVisible);
  969. // break;
  970. // case AFFECT_SLEEP:
  971. // m_GraphicThingInstance.SetSleep(isVisible);
  972. // break;
  973. case AFFECT_STUN:
  974. m_GraphicThingInstance.SetSleep(isVisible);
  975. break;
  976. }
  977.  
  978. if (eAffect>=AFFECT_NUM)
  979. {
  980. TraceError("CInstanceBase[VID:%d]::SetAffect(eAffect:%d<AFFECT_NUM:%d, isVisible=%d)", GetVirtualID(), eAffect, isVisible);
  981. return;
  982. }
  983.  
  984. if (isVisible)
  985. {
  986. if (!m_adwCRCAffectEffect[eAffect])
  987. {
  988. m_adwCRCAffectEffect[eAffect]=__AttachEffect(EFFECT_AFFECT+eAffect);
  989. }
  990. }
  991. else
  992. {
  993. if (m_adwCRCAffectEffect[eAffect])
  994. {
  995. __DetachEffect(m_adwCRCAffectEffect[eAffect]);
  996. m_adwCRCAffectEffect[eAffect]=0;
  997. }
  998. }
  999. }
  1000.  
  1001. bool CInstanceBase::IsPossibleEmoticon()
  1002. {
  1003. CEffectManager& rkEftMgr=CEffectManager::Instance();
  1004. for(DWORD eEmoticon = 0; eEmoticon < EMOTICON_NUM; eEmoticon++)
  1005. {
  1006. DWORD effectID = ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon];
  1007. if( effectID && rkEftMgr.IsAliveEffect(effectID) )
  1008. return false;
  1009. }
  1010.  
  1011. if(ELTimer_GetMSec() - m_dwEmoticonTime < 1000)
  1012. {
  1013. TraceError("ELTimer_GetMSec() - m_dwEmoticonTime");
  1014. return false;
  1015. }
  1016.  
  1017. return true;
  1018. }
  1019.  
  1020. void CInstanceBase::SetFishEmoticon()
  1021. {
  1022. SetEmoticon(EMOTICON_FISH);
  1023. }
  1024.  
  1025. void CInstanceBase::SetEmoticon(UINT eEmoticon)
  1026. {
  1027. if (eEmoticon>=EMOTICON_NUM)
  1028. {
  1029. TraceError("CInstanceBase[VID:%d]::SetEmoticon(eEmoticon:%d<EMOTICON_NUM:%d, isVisible=%d)",
  1030. GetVirtualID(), eEmoticon);
  1031. return;
  1032. }
  1033. if (IsPossibleEmoticon())
  1034. {
  1035. D3DXVECTOR3 v3Pos = m_GraphicThingInstance.GetPosition();
  1036. v3Pos.z += float(m_GraphicThingInstance.GetHeight());
  1037.  
  1038. //CEffectManager& rkEftMgr=CEffectManager::Instance();
  1039. CCamera * pCamera = CCameraManager::Instance().GetCurrentCamera();
  1040.  
  1041. D3DXVECTOR3 v3Dir = (pCamera->GetEye()-v3Pos)*9/10;
  1042. v3Pos = pCamera->GetEye()-v3Dir;
  1043.  
  1044. v3Pos = D3DXVECTOR3(0,0,0);
  1045. v3Pos.z += float(m_GraphicThingInstance.GetHeight());
  1046.  
  1047. //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon],v3Pos,D3DXVECTOR3(0,0,0));
  1048. m_GraphicThingInstance.AttachEffectByID(0, NULL, ms_adwCRCAffectEffect[EFFECT_EMOTICON+eEmoticon],&v3Pos);
  1049. m_dwEmoticonTime = ELTimer_GetMSec();
  1050. }
  1051. }
  1052.  
  1053. void CInstanceBase::SetDustGap(float fDustGap)
  1054. {
  1055. ms_fDustGap=fDustGap;
  1056. }
  1057.  
  1058. void CInstanceBase::SetHorseDustGap(float fDustGap)
  1059. {
  1060. ms_fHorseDustGap=fDustGap;
  1061. }
  1062.  
  1063. void CInstanceBase::__DetachEffect(DWORD dwEID)
  1064. {
  1065. m_GraphicThingInstance.DettachEffect(dwEID);
  1066. }
  1067.  
  1068. DWORD CInstanceBase::__AttachEffect(UINT eEftType)
  1069. {
  1070. // 2004.07.17.levites.isShow를 ViewFrustumCheck로 변경
  1071. if (IsAffect(AFFECT_INVISIBILITY))
  1072. return 0;
  1073.  
  1074. if (eEftType>=EFFECT_NUM)
  1075. return 0;
  1076.  
  1077. if (ms_astAffectEffectAttachBone[eEftType].empty())
  1078. {
  1079. return m_GraphicThingInstance.AttachEffectByID(0, NULL, ms_adwCRCAffectEffect[eEftType]);
  1080. }
  1081. else
  1082. {
  1083. std::string & rstrBoneName = ms_astAffectEffectAttachBone[eEftType];
  1084. const char * c_szBoneName;
  1085. // 양손에 붙일 때 사용한다.
  1086. // 이런 식의 예외 처리를 해놓은 것은 캐릭터 마다 Equip 의 Bone Name 이 다르기 때문.
  1087. if (0 == rstrBoneName.compare("PART_WEAPON"))
  1088. {
  1089. if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szBoneName))
  1090. {
  1091. return m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, ms_adwCRCAffectEffect[eEftType]);
  1092. }
  1093. }
  1094. else if (0 == rstrBoneName.compare("PART_WEAPON_LEFT"))
  1095. {
  1096. if (m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON_LEFT, &c_szBoneName))
  1097. {
  1098. return m_GraphicThingInstance.AttachEffectByID(0, c_szBoneName, ms_adwCRCAffectEffect[eEftType]);
  1099. }
  1100. }
  1101. else
  1102. {
  1103. return m_GraphicThingInstance.AttachEffectByID(0, rstrBoneName.c_str(), ms_adwCRCAffectEffect[eEftType]);
  1104. }
  1105. }
  1106.  
  1107. return 0;
  1108. }
  1109.  
  1110. void CInstanceBase::__ComboProcess()
  1111. {
  1112. /*
  1113. DWORD dwcurComboIndex = m_GraphicThingInstance.GetComboIndex();
  1114.  
  1115. if (0 != dwcurComboIndex)
  1116. {
  1117. if (m_dwLastComboIndex != m_GraphicThingInstance.GetComboIndex())
  1118. {
  1119. if (!m_GraphicThingInstance.IsHandMode() & IsAffect(AFFECT_HWAYEOM))
  1120. {
  1121. __AttachEffect(EFFECT_FLAME_ATTACK);
  1122. }
  1123. }
  1124. }
  1125.  
  1126. m_dwLastComboIndex = dwcurComboIndex;
  1127. */
  1128. }
  1129.  
  1130. bool CInstanceBase::RegisterEffect(UINT eEftType, const char* c_szEftAttachBone, const char* c_szEftName, bool isCache)
  1131. {
  1132. if (eEftType>=EFFECT_NUM)
  1133. return false;
  1134.  
  1135. ms_astAffectEffectAttachBone[eEftType]=c_szEftAttachBone;
  1136.  
  1137. DWORD& rdwCRCEft=ms_adwCRCAffectEffect[eEftType];
  1138. if (!CEffectManager::Instance().RegisterEffect2(c_szEftName, &rdwCRCEft, isCache))
  1139. {
  1140. TraceError("CInstanceBase::RegisterEffect(eEftType=%d, c_szEftAttachBone=%s, c_szEftName=%s, isCache=%d) - Error", eEftType, c_szEftAttachBone, c_szEftName, isCache);
  1141. rdwCRCEft=0;
  1142. return false;
  1143. }
  1144.  
  1145. return true;
  1146. }
  1147.  
  1148. void CInstanceBase::RegisterTitleName(int iIndex, const char * c_szTitleName)
  1149. {
  1150. g_TitleNameMap.insert(make_pair(iIndex, c_szTitleName));
  1151. }
  1152.  
  1153. #ifdef ENABLE_TITLE_SYSTEM
  1154. void CInstanceBase::RegisterTitlePrestigeName(int iIndex, const char * c_szTitlePrestigeName)
  1155. {
  1156. g_TitlePrestigeNameMap.insert(make_pair(iIndex, c_szTitlePrestigeName));
  1157. }
  1158. #endif
  1159.  
  1160. D3DXCOLOR __RGBToD3DXColoru(UINT r, UINT g, UINT b)
  1161. {
  1162. DWORD dwColor=0xff;dwColor<<=8;
  1163. dwColor|=r;dwColor<<=8;
  1164. dwColor|=g;dwColor<<=8;
  1165. dwColor|=b;
  1166.  
  1167. return D3DXCOLOR(dwColor);
  1168. }
  1169.  
  1170. bool CInstanceBase::RegisterNameColor(UINT uIndex, UINT r, UINT g, UINT b)
  1171. {
  1172. if (uIndex>=NAMECOLOR_NUM)
  1173. return false;
  1174.  
  1175. g_akD3DXClrName[uIndex]=__RGBToD3DXColoru(r, g, b);
  1176. return true;
  1177. }
  1178.  
  1179. bool CInstanceBase::RegisterTitleColor(UINT uIndex, UINT r, UINT g, UINT b)
  1180. {
  1181. if (uIndex>=TITLE_NUM)
  1182. return false;
  1183.  
  1184. g_akD3DXClrTitle[uIndex]=__RGBToD3DXColoru(r, g, b);
  1185. return true;
  1186. }
  1187.  
  1188. #ifdef ENABLE_TITLE_SYSTEM
  1189. bool CInstanceBase::RegisterTitlePrestigeColor(UINT uIndex, UINT r, UINT g, UINT b)
  1190. {
  1191. if (uIndex>=TITLE_NUM_PRESTIGE)
  1192. return false;
  1193.  
  1194. g_akD3DXClrTitlePrestige[uIndex]=__RGBToD3DXColoru(r, g, b);
  1195. return true;
  1196. }
  1197. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement