Actor.cpp
上传用户:cydong117
上传日期:2009-11-10
资源大小:638k
文件大小:175k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. /******************************************************************************************************************
  2.                                                                                                                    
  3. 葛碘疙:
  4. 累己磊:
  5. 累己老:
  6. [老磊][荐沥磊] : 荐沥 郴侩
  7.                                                                                                                    
  8. *******************************************************************************************************************/
  9. #include "StdAfx.h"
  10. /******************************************************************************************************************
  11. CActor Class
  12. *******************************************************************************************************************/
  13. /******************************************************************************************************************
  14. 窃荐疙 : CActor::CActor()
  15. 累己磊 : 
  16. 累己老 : 
  17. 格利   : 
  18. 免仿   : 
  19. [老磊][荐沥磊] : 荐沥郴侩
  20. *******************************************************************************************************************/
  21. CActor::CActor()
  22. {
  23. InitActor();
  24. }
  25. /******************************************************************************************************************
  26. 窃荐疙 : CActor::~CActor()
  27. 累己磊 : 
  28. 累己老 : 
  29. 格利   : 
  30. 免仿   : 
  31. [老磊][荐沥磊] : 荐沥郴侩
  32. *******************************************************************************************************************/
  33. CActor::~CActor()
  34. {
  35. DestroyActor();
  36. }
  37. VOID CActor::InitActor()
  38. {
  39. m_wOldPosX = 0;
  40. m_wOldPosY = 0;
  41. m_bOldDir = 0;
  42. m_bOpenHealth = FALSE;
  43. m_bWarMode = FALSE;
  44. m_bCurrMtn = _MT_MON_STAND;
  45. m_bCurrDir = _DIRECTION_LIST_1;
  46. m_bMoveDir = _DIRECTION_LIST_1;
  47. m_bEffectFrameCnt = _DEFAULT_SPELLFRAME;
  48. m_bHPPercent = 100;
  49. m_bMoveNextFrmCnt = 5;
  50. m_bIsMoved = FALSE;
  51. m_dwWarModeTime = 0;
  52. m_wMAXHP = 0;
  53. m_wHP = 0;
  54. m_wMP = 0;
  55. m_wPosX = 0;
  56. m_wPosY = 0;
  57. m_bLightSize = 2;
  58. m_shShiftPixelX = 0;
  59. m_shShiftPixelY = 0;
  60. m_shShiftTileX = 0;
  61. m_shShiftTileY = 0;
  62. m_bMoveSpeed = 0;
  63. m_shScrnPosX = 0;
  64. m_shScrnPosY = 0;
  65. m_wCurrDelay = 0;
  66. m_dwFstFrame = 0;
  67. m_dwEndFrame = 1;
  68. m_dwCurrFrame = 0;
  69. m_wDelay = 0;
  70. m_pxActorImage = NULL;
  71. m_bMsgHurryCheck = FALSE;
  72. m_bUseEffect = FALSE;
  73. m_bUseSwordEffect = FALSE;
  74. m_bReverse = FALSE;
  75. m_bIsDead = FALSE;
  76. m_bABlendRev = FALSE;
  77. m_dwCurrEffectFrame = 0;
  78. m_dwFstEffectFrame = 0;
  79. m_dwEndEffectFrame = 0;
  80. m_bEffectFrame = 0;
  81. m_bBackStepFrame = 0;
  82. m_bBackStepFrameCnt = 0;
  83. m_nState = 0;
  84. m_nDividedChatLine = 0;
  85. m_dwIdentity = 0;
  86. m_wCurrChatDelay = 0;
  87. m_wABlendCurrDelay = 0;
  88. m_wABlendCurrDelay = 0;
  89. m_bFstSoundPlayed   = FALSE;
  90. m_bAppearState = _DIG_NORMAL;
  91. m_wStateClr = _STATE_NOTUSED;
  92. m_dwNameClr = RGB(255, 255, 255);
  93. m_bActorImgIdx = _IMAGE_M_HUMAN;
  94. m_bEffectImgIdx = _IMAGE_MAGIC;
  95. ZeroMemory(m_szName, 64);
  96. ZeroMemory(&m_stFeature,   sizeof(FEATURE));
  97. ZeroMemory(&m_stHitter,    sizeof(FEATURE));
  98. ZeroMemory(m_bLightRadius, sizeof(BYTE)*2);
  99. ZeroMemory(m_bLightColor , sizeof(BYTE)*2*3);
  100. ZeroMemory(m_szChatMsg, MAX_PATH);
  101. ZeroMemory(m_szChatMsgArg, MAX_PATH*5);
  102. ZeroMemory(&m_rcActor, sizeof(RECT));
  103. ZeroMemory(&m_rcTargetRgn, sizeof(RECT));
  104. D3DVECTOR vNorm(0, 0, -1);
  105. m_avBoard[0] = D3DVERTEX(D3DVECTOR(-0.5f, 0.5f, 0), vNorm, 0, 0);
  106. m_avBoard[1] = D3DVERTEX(D3DVECTOR(-0.5f,-0.5f, 0), vNorm, 0, 1);
  107. m_avBoard[2] = D3DVERTEX(D3DVECTOR( 0.5f, 0.5f, 0), vNorm, 1, 0);
  108. m_avBoard[3] = D3DVERTEX(D3DVECTOR( 0.5f,-0.5f, 0), vNorm, 1, 1);
  109. }
  110. VOID CActor::DestroyActor()
  111. {
  112. INT nCnt;
  113. SHORT shLeftMsgCnt;
  114. LPPACKETMSG lpPacketMsg;
  115. lpPacketMsg  = NULL;
  116. shLeftMsgCnt = m_xPacketQueue.GetCount();
  117. // 阶咯乐绰 菩哦阑 瘤款促.
  118. if ( shLeftMsgCnt > 0 )
  119. {
  120. for ( nCnt = 0; nCnt < shLeftMsgCnt; nCnt++ )
  121. {
  122. lpPacketMsg = (LPPACKETMSG)m_xPacketQueue.PopQ();
  123. if ( lpPacketMsg )
  124. {
  125. SAFE_DELETE(lpPacketMsg);
  126. }
  127. }
  128. }
  129. // 葛电函荐甫 檬扁拳 矫难敌促.
  130. InitActor();
  131. }
  132. WORD CActor::GetCharState()
  133. {
  134. WORD wCharState = 0XFFFF;
  135. // if( m_nState &   0X100000 ) wCharState = _STATE_SHIELDUSE;
  136. if( m_nState &   0X800000 ) wCharState = _STATE_ABLEND;
  137. if( m_nState &  0X4000000 ) wCharState = _STATE_GRAY;
  138. if( m_nState &  0X8000000 ) wCharState = _STATE_FUCHSIA;
  139. if( m_nState & 0X10000000 ) wCharState = _STATE_YELLOW;
  140. if( m_nState & 0X20000000 ) wCharState = _STATE_BLUE;
  141. if( m_nState & 0X40000000 ) wCharState = _STATE_RED;
  142. if( m_nState & 0X80000000 ) wCharState = _STATE_GREEN;
  143. m_wStateClr = _STATE_NOTUSED;
  144.   if ( m_wStateClr == _STATE_ABLEND || m_wStateClr == _STATE_SHIELDUSE )
  145. m_wStateClr = _STATE_NOTUSED;
  146. return wCharState;
  147. }
  148. VOID CActor::DrawWithEffected(INT nX, INT nY, INT nXSize, INT nYSize, WORD* pwSrc, WORD wChooseColor1, WORD wChooseColor2, BOOL bFocused, BYTE bOpa, WORD wState)
  149. {
  150. switch ( wState )
  151. {
  152. case _STATE_RED:
  153. case _STATE_GREEN:
  154. case _STATE_BLUE:
  155. case _STATE_YELLOW:
  156. case _STATE_FUCHSIA:
  157. case _STATE_GRAY:
  158. if ( m_wABlendDelay )
  159. g_xMainWnd.DrawWithImageForCompClipRgnColor(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wState, bFocused, TRUE);
  160. else
  161. g_xMainWnd.DrawWithImageForCompClipRgnColor(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wState, bFocused, FALSE);
  162. break;
  163. case _STATE_ABLEND:
  164. {
  165. if ( bFocused ) bOpa -= 20;
  166. if ( bOpa < 0 && bOpa > 100 ) bOpa = 0;
  167. g_xMainWnd.DrawWithABlendCompDataWithBackBuffer(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wChooseColor1, wChooseColor2, bOpa);
  168. }
  169. break;
  170. case _STATE_SHIELDUSE:
  171. case _STATE_NOTUSED:
  172. default:
  173. {
  174. if ( !m_wABlendDelay )
  175. g_xMainWnd.DrawWithImageForCompClipRgn(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wChooseColor1, wChooseColor2, bFocused);
  176. else
  177. g_xMainWnd.DrawWithABlendCompDataWithBackBuffer(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wChooseColor1, wChooseColor2, bOpa);
  178. }
  179. break;
  180. }
  181. }
  182. /******************************************************************************************************************
  183. 窃荐疙 : CActor::Create()
  184. 累己磊 : 
  185. 累己老 : 
  186. 格利   : 
  187. 涝仿   : CImageHandler* pxImgHandler
  188.          FEATURE stFeature
  189.          BYTE bMtn
  190.          WORD bDir
  191.          WORD wPosX
  192.          WORD wPosY
  193. 免仿   : BOOL 
  194. [老磊][荐沥磊] : 荐沥郴侩
  195. *******************************************************************************************************************/
  196. BOOL CActor::Create(CImageHandler* pxImgHandler, FEATURE* pstFeature, BYTE bMtn, WORD bDir, WORD wPosX, WORD wPosY)
  197. {
  198. // 傈崔牢磊 利侩 棺 犬牢./////////////////////////////////////////////////////////////////////////////////
  199. if ( /*(pstFeature->bGender >= 0 && pstFeature->bGender < _MAX_GENDER) && */(bDir >= 0 && bDir < _MAX_DIRECTION) )
  200. {
  201. switch ( pstFeature->bGender )
  202. {
  203. case _GENDER_MAN:
  204. {
  205. if ( (pstFeature->bDress < 0 && pstFeature->bDress >= _MAX_HERO_KIND) ||
  206.  (bMtn < 0 && bMtn >= _MAX_HERO_MTN) )
  207. return FALSE;
  208. else
  209. {
  210. m_bActorImgIdx = _IMAGE_M_HUMAN;
  211. m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[bMtn].wFstFrm + pstFeature->bDress*_MAX_HERO_FRAME + bDir*10;
  212. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[bMtn].wFrmCnt;
  213. m_wDelay = g_xSpriteInfo.m_stHeroSpr[bMtn].wDelay;
  214. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  215. pstFeature->bHair = 2;
  216. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  217. }
  218. }
  219. break;
  220. case _GENDER_WOMAN:
  221. {
  222. if ( (pstFeature->bDress < 0 && pstFeature->bDress >= _MAX_HERO_KIND) ||
  223.  (bMtn < 0 && bMtn >= _MAX_HERO_MTN) )
  224. return FALSE;
  225. else
  226. {
  227. m_bActorImgIdx = _IMAGE_WM_HUMAN;
  228. m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[bMtn].wFstFrm + pstFeature->bDress*_MAX_HERO_FRAME + bDir*10;
  229. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[bMtn].wFrmCnt;
  230. m_wDelay = g_xSpriteInfo.m_stHeroSpr[bMtn].wDelay;
  231. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  232. pstFeature->bHair = 2;
  233. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  234. }
  235. }
  236. break;
  237. case _GENDER_MON:
  238. {
  239. if ( (pstFeature->bDress < 0 && pstFeature->bDress >= _MAX_MON_KIND) ||
  240.  (bMtn < 0 && bMtn >= _MAX_MON_MTN) )
  241. return FALSE;
  242. else
  243. {
  244. switch ( m_stFeature.bDress )
  245. {
  246. case 31: // 侥牢檬.
  247. case 67: // 盟锋脚.
  248. case 73: // 厚阜盔面.
  249. case 104: // 利岿付.
  250. bDir = 0;
  251. case 106: // 气救芭固.
  252. bDir = 1;
  253. break;
  254. default:
  255. break;
  256. }
  257. g_xSpriteInfo.SetMonFrameInfo(pstFeature->bDress);
  258. m_bActorImgIdx = _IMAGE_MONSTER1 + (pstFeature->bDress / 10);
  259. m_dwFstFrame = g_xSpriteInfo.m_stMonSpr[bMtn].wFstFrm + (pstFeature->bDress%10)*_MAX_MON_FRAME + bDir*10;
  260. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stMonSpr[bMtn].wFrmCnt;
  261. m_wDelay = g_xSpriteInfo.m_stMonSpr[bMtn].wDelay;
  262. }
  263. }
  264. break;
  265. case _GENDER_NPC:
  266. {
  267. if ( (pstFeature->bDress < 0 && pstFeature->bDress >= _MAX_NPC_KIND) ||
  268.  (bMtn < 0 && bMtn >= _MAX_NPC_MTN) )
  269. return FALSE;
  270. else
  271. {
  272. m_bActorImgIdx = _IMAGE_NPC;
  273. bDir++; // bDir篮 0捞 瞪荐档 乐扁锭巩捞促.
  274. bDir = bDir/3;
  275. m_dwFstFrame = g_xSpriteInfo.m_stNPCSpr[bMtn].wFstFrm + pstFeature->bDress*_MAX_NPC_FRAME + bDir*10;
  276. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stNPCSpr[bMtn].wFrmCnt;
  277. m_wDelay = g_xSpriteInfo.m_stNPCSpr[bMtn].wDelay;
  278. }
  279. }
  280. break;
  281. default:
  282. return FALSE;
  283. }
  284. m_bCurrMtn = bMtn;
  285. m_bCurrDir = bDir;
  286. m_bMoveDir = bDir;
  287. m_wPosX = wPosX;
  288. m_wPosY = wPosY;
  289. memcpy(&m_stFeature, pstFeature, sizeof(FEATURE));
  290. m_pxActorImage = &(pxImgHandler->m_xImageList[m_bActorImgIdx]);
  291. m_dwCurrFrame = m_dwFstFrame;
  292. m_bMoveDir = m_bCurrDir;
  293. D3DVECTOR vNorm(0, 0, -1);
  294. m_avBoard[0] = D3DVERTEX(D3DVECTOR(-0.5f, 0.5f, 0), vNorm, 0, 0);
  295. m_avBoard[1] = D3DVERTEX(D3DVECTOR(-0.5f,-0.5f, 0), vNorm, 0, 1);
  296. m_avBoard[2] = D3DVERTEX(D3DVECTOR( 0.5f, 0.5f, 0), vNorm, 1, 0);
  297. m_avBoard[3] = D3DVERTEX(D3DVECTOR( 0.5f,-0.5f, 0), vNorm, 1, 1);
  298. return TRUE;
  299. }
  300. return FALSE;
  301. }
  302. /******************************************************************************************************************
  303. 窃荐疙 : CActor::CheckFeatureValidate()
  304. 累己磊 : 
  305. 累己老 : 
  306. 格利   : 
  307. 涝仿   : FEATURE stFeature
  308. 免仿   : BOOL 
  309. [老磊][荐沥磊] : 荐沥郴侩
  310. *******************************************************************************************************************/
  311. BOOL CActor::CheckFeatureValidate(FEATURE stFeature)
  312. {
  313. // if ( (stFeature.bGender >= 0 && stFeature.bGender < _MAX_GENDER) )
  314. {
  315. switch ( stFeature.bGender )
  316. {
  317. case _GENDER_MAN:
  318. case _GENDER_WOMAN:
  319. if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_HERO_KIND ) return FALSE;
  320. break;
  321. case _GENDER_MON:
  322. {
  323. if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_MON_KIND ) return FALSE;
  324. }
  325. break;
  326. case _GENDER_NPC:
  327. default:
  328. return FALSE;
  329. }
  330. }
  331. return TRUE;
  332. }
  333. /******************************************************************************************************************
  334. 窃荐疙 : CActor::ChangeFeature()
  335. 累己磊 : 
  336. 累己老 : 
  337. 格利   : 
  338. 涝仿   : CImageHandler* pxImgHandler
  339.          FEATURE stFeature
  340. 免仿   : BOOL 
  341. [老磊][荐沥磊] : 荐沥郴侩
  342. *******************************************************************************************************************/
  343. BOOL CActor::ChangeFeature(FEATURE stFeature)
  344. {
  345. CImageHandler* pxImgHandler = &g_xGameProc.m_xImage;
  346. if ( /*stFeature.bGender >= 0 && stFeature.bGender < _MAX_GENDER && */CheckFeatureValidate(stFeature) )
  347. {
  348. switch ( stFeature.bGender )
  349. {
  350. case _GENDER_MAN:
  351. {
  352. if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_HERO_KIND )
  353. return FALSE;
  354. else
  355. {
  356. m_bActorImgIdx = _IMAGE_M_HUMAN;
  357. m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wFstFrm + stFeature.bDress*_MAX_HERO_FRAME + m_bCurrDir*10;
  358. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wFrmCnt;
  359. m_wDelay = g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wDelay;
  360. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  361. stFeature.bHair = 2;
  362. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  363. }
  364. }
  365. break;
  366. case _GENDER_WOMAN:
  367. {
  368. if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_HERO_KIND )
  369. return FALSE;
  370. else
  371. {
  372. m_bActorImgIdx = _IMAGE_WM_HUMAN;
  373. m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wFstFrm + stFeature.bDress*_MAX_HERO_FRAME + m_bCurrDir*10;
  374. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wFrmCnt;
  375. m_wDelay = g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wDelay;
  376. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  377. stFeature.bHair = 2;
  378. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  379. }
  380. }
  381. break;
  382. case _GENDER_MON:
  383. {
  384. if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_MON_KIND )
  385. return FALSE;
  386. else
  387. {
  388. g_xSpriteInfo.SetMonFrameInfo(stFeature.bDress);
  389. m_bActorImgIdx = _IMAGE_MONSTER1 + (stFeature.bDress/10);
  390. m_dwFstFrame = g_xSpriteInfo.m_stMonSpr[m_bCurrMtn].wFstFrm + (stFeature.bDress%10)*_MAX_MON_FRAME + m_bCurrDir*10;
  391. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stMonSpr[m_bCurrMtn].wFrmCnt;
  392. m_wDelay = g_xSpriteInfo.m_stMonSpr[m_bCurrMtn].wDelay;
  393. }
  394. }
  395. break;
  396. // NPC绰 橇饭烙捞 老沥窍瘤 臼栏骨肺 蝶肺 利侩矫挪促.
  397. case _GENDER_NPC:
  398. default:
  399. return FALSE;
  400. }
  401. m_stFeature = stFeature;
  402. m_pxActorImage = &(pxImgHandler->m_xImageList[m_bActorImgIdx]);
  403. m_dwCurrFrame = m_dwFstFrame;
  404. return TRUE;
  405. }
  406. return FALSE;
  407. }
  408. /******************************************************************************************************************
  409. 窃荐疙 : CActor::SetMotionFrame()
  410. 累己磊 : 
  411. 累己老 : 
  412. 格利   : 
  413. 涝仿   : BYTE bMtn
  414.          BYTE bDir
  415. 免仿   : BOOL 
  416. [老磊][荐沥磊] : 荐沥郴侩
  417. *******************************************************************************************************************/
  418. BOOL CActor::SetMotionFrame(BYTE bMtn, BYTE bDir)
  419. {
  420. if ( /*(bMtn < 0 && bMtn >= _MAX_HERO_MTN) || */(bDir < 0 && bDir >= _MAX_DIRECTION) )
  421. return FALSE;
  422. switch ( m_stFeature.bGender )
  423. {
  424. case _GENDER_MAN:
  425. {
  426. m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[bMtn].wFstFrm + m_stFeature.bDress*_MAX_HERO_FRAME + bDir*10;
  427. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[bMtn].wFrmCnt;
  428. m_wDelay = g_xSpriteInfo.m_stHeroSpr[bMtn].wDelay;
  429. }
  430. break;
  431. case _GENDER_WOMAN:
  432. {
  433. m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[bMtn].wFstFrm + m_stFeature.bDress*_MAX_HERO_FRAME + bDir*10;
  434. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[bMtn].wFrmCnt;
  435. m_wDelay = g_xSpriteInfo.m_stHeroSpr[bMtn].wDelay;
  436. }
  437. break;
  438. case _GENDER_MON:
  439. {
  440. if ( m_stFeature.bDress == 31 && bMtn == _MT_MON_STAND )
  441. bDir = 0;
  442. switch ( m_stFeature.bDress )
  443. {
  444. case 31: // 侥牢檬.
  445. case 67: // 盟锋脚.
  446. case 73: // 厚阜盔面.
  447. case 104: // 利岿付.
  448. bDir = 0;
  449. case 106: // 气救芭固.
  450. bDir = 1;
  451. break;
  452. default:
  453. break;
  454. }
  455. g_xSpriteInfo.SetMonFrameInfo(m_stFeature.bDress);
  456. m_dwFstFrame = g_xSpriteInfo.m_stMonSpr[bMtn].wFstFrm + (m_stFeature.bDress%10)*_MAX_MON_FRAME + bDir*10;
  457. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stMonSpr[bMtn].wFrmCnt;
  458. m_wDelay = g_xSpriteInfo.m_stMonSpr[bMtn].wDelay;
  459. }
  460. break;
  461. case _GENDER_NPC:
  462. {
  463. bDir++; // bDir篮 0捞 瞪荐档 乐扁锭巩捞促.
  464. bDir = bDir/3;
  465. m_dwFstFrame = g_xSpriteInfo.m_stNPCSpr[bMtn].wFstFrm + m_stFeature.bDress*_MAX_NPC_FRAME + bDir*10;
  466. m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stNPCSpr[bMtn].wFrmCnt;
  467. m_wDelay = g_xSpriteInfo.m_stNPCSpr[bMtn].wDelay;
  468. }
  469. break;
  470. default:
  471. return FALSE;
  472. }
  473. m_bCurrMtn = bMtn;
  474. m_bCurrDir = bDir;
  475. m_bMoveDir = bDir;
  476. m_dwCurrFrame = m_dwFstFrame;
  477. m_wCurrDelay = 0;
  478. if ( m_bCurrDir == _DIRECTION_LIST_8 )
  479. m_bMoveNextFrmCnt = 2;
  480. else
  481. m_bMoveNextFrmCnt = 5;
  482. return TRUE;
  483. }
  484. VOID CActor::PlayActSound()
  485. {
  486. INT nWaveNum = -1;
  487. const INT nActorSndTbl[100] = 
  488. {
  489.  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, //  0 -  9
  490.  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, // 10 - 19
  491. 160, 161, 100, 101, 102, 163,   0, 162,  83,  80, // 20 - 29
  492.   1,  10,  20,  21,  22,  23, 150,  24,  25,  26, // 30 - 39
  493.  27,  30,  32,  31, 151,  34,  28,  18,  40,  50, // 40 - 49
  494.  51,  52,  53, 152,  36,  72,  37,  38,  43,  44, // 50 - 59
  495.  45,  48,  49,  90,  91,  70,  73, 140,  74, 120, // 60 - 69
  496. 121,  81,  82,  41,  42,  39, 110, 111, 112, 130, // 70 - 79
  497. 164,  46,  47,  61,  62,  63,  71,  -1,  -1, 170, // 80 - 89
  498. 171,  33,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, // 90 - 99
  499. };
  500. if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn == _MT_MON_APPEAR ) // 唱鸥唱扁.
  501. {
  502. nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10;
  503. }
  504. else if ( (m_dwCurrFrame == m_dwFstFrame+1) && (m_bCurrMtn == _MT_MON_STAND || _MT_MON_WALK) ) // 肛苗乐扁.
  505. {
  506. INT nRand = rand();
  507. if ( m_bFstSoundPlayed && !m_bIsDead )
  508. {
  509. if ( !(nRand%25) )
  510. nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 1;
  511. else
  512. nWaveNum = -1;
  513. }
  514. else
  515. {
  516. if ( !(nRand%3) && !m_bIsDead )
  517. {
  518. nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 1;
  519. m_bFstSoundPlayed = TRUE;
  520. }
  521. else
  522. nWaveNum = -1;
  523. }
  524. }
  525. else if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn == _MT_MON_ATTACK_A ) // 老馆傍拜1.
  526. {
  527. nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 2;
  528. }
  529. else if ( m_dwCurrFrame == m_dwFstFrame+2 && m_bCurrMtn == _MT_MON_ATTACK_A ) // 老馆傍拜1.
  530. {
  531. nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 3;
  532. }
  533. else if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn == _MT_MON_HITTED )
  534. {
  535. if ( m_stFeature.bGender < 2 )
  536. {
  537. switch ( m_stHitter.bWeapon )
  538. {
  539. case 21: case 24: // 窜八, 厚窜八.
  540. case 8: case 9: // 格八, 酒府荐格八.
  541. case 18:  case 22:  case 23:  case 26:  case 27:  case 28:  case 30:  // 荤葛八. 没悼八. 枚八. 没澜八. 寒荤八. 玫飞. 邦己八.
  542. case 1:   case 4:  case 11:  case 13:  case 14:  case 20:  case 25:  case 29:  case 31:   // 蜡岿档. 宫没措档. 腊钦档. 焙档. 档锋焊档. 荤阿档. 技梅档. 抗档. 檬去档.
  543. nWaveNum = 70;
  544. break;
  545. case 5:  case 10:  case 12: // 伙利措何. 没悼档尝. 楷磊何.
  546. case 15:  // 颇锄柳寸.
  547. nWaveNum = 71;
  548. break;
  549. case 2:  case 3:  case 6:  case 7: case 16:  case 17: case 19:  // 伙瘤芒. 玫屈格. 全酒芒. 邦豹捞. 没付芒, 侩酒厘. 力付豪
  550. nWaveNum = 72;
  551. break;
  552. default:
  553. nWaveNum = 73; // 盖颊.
  554. break;
  555. }
  556. }
  557. }
  558. else if ( m_dwCurrFrame == m_dwFstFrame+2 && m_bCurrMtn == _MT_MON_HITTED ) // 嘎扁.
  559. {
  560. nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 4;
  561. }
  562. else if ( m_dwCurrFrame == m_dwFstFrame+2 && m_bCurrMtn == _MT_MON_DIE ) // 磷扁1.
  563. {
  564. nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 5;
  565. }
  566. else if ( m_dwCurrFrame == m_dwFstFrame+3 && m_bCurrMtn == _MT_MON_DIE ) // 磷扁2.
  567. {
  568. nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 6;
  569. }
  570. /* if ( nWaveNum != -1 )
  571. g_xSound.PlayActorWav(m_wPosX, m_wPosY, g_xGameProc.m_xMyHero.m_wPosX, g_xGameProc.m_xMyHero.m_wPosY, nWaveNum);
  572. */
  573. }
  574. /******************************************************************************************************************
  575. 窃荐疙 : CActor::SetMoving()
  576. 累己磊 : 
  577. 累己老 : 
  578. 格利   : 
  579. 免仿   : VOID 
  580. [老磊][荐沥磊] : 荐沥郴侩
  581. *******************************************************************************************************************/
  582. VOID CActor::SetMoving()
  583. {
  584. WORD wFrmCnt  = m_dwEndFrame  - m_dwFstFrame;
  585. WORD wCurrFrm = m_dwCurrFrame - m_dwFstFrame;
  586. switch ( m_bMoveDir )
  587. {
  588. case _DIRECTION_LIST_1:
  589. m_shShiftPixelX =  0;
  590. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  591. m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  592. else
  593. m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  594. break;
  595. case _DIRECTION_LIST_2:
  596. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  597. m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  598. else
  599. m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  600. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  601. m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  602. else
  603. m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  604. break;
  605. case _DIRECTION_LIST_3:
  606. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  607. m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  608. else
  609. m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  610. m_shShiftPixelY = 0;
  611. break;
  612. case _DIRECTION_LIST_4:
  613. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  614. m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  615. else
  616. m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  617. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  618. m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  619. else
  620. m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  621. break;
  622. case _DIRECTION_LIST_5:
  623. m_shShiftPixelX =  0;
  624. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  625. m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  626. else
  627. m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  628. break;
  629. case _DIRECTION_LIST_6:
  630. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  631. m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  632. else
  633. m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  634. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  635. m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  636. else
  637. m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  638. break;
  639. case _DIRECTION_LIST_7:
  640. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  641. m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  642. else
  643. m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  644. m_shShiftPixelY =  0;
  645. break;
  646. case _DIRECTION_LIST_8:
  647. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  648. m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  649. else
  650. m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  651. if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
  652. m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
  653. else
  654. m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
  655. break;
  656. }
  657. }
  658. /******************************************************************************************************************
  659. 窃荐疙 : CActor::SetBackStepMoving()
  660. 累己磊 : 
  661. 累己老 : 
  662. 格利   : 
  663. 免仿   : VOID 
  664. [老磊][荐沥磊] : 荐沥郴侩
  665. *******************************************************************************************************************/
  666. VOID CActor::SetBackStepMoving()
  667. {
  668. switch ( m_bMoveDir )
  669. {
  670. case _DIRECTION_LIST_1:
  671. m_shShiftPixelX =  0;
  672. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  673. m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  674. else
  675. m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  676. break;
  677. case _DIRECTION_LIST_2:
  678. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  679. m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  680. else
  681. m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  682. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  683. m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  684. else
  685. m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  686. break;
  687. case _DIRECTION_LIST_3:
  688. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  689. m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  690. else
  691. m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  692. m_shShiftPixelY = 0;
  693. break;
  694. case _DIRECTION_LIST_4:
  695. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  696. m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  697. else
  698. m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  699. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  700. m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  701. else
  702. m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  703. break;
  704. case _DIRECTION_LIST_5:
  705. m_shShiftPixelX =  0;
  706. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  707. m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  708. else
  709. m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  710. break;
  711. case _DIRECTION_LIST_6:
  712. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  713. m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  714. else
  715. m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  716. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  717. m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  718. else
  719. m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  720. break;
  721. case _DIRECTION_LIST_7:
  722. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  723. m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  724. else
  725. m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  726. m_shShiftPixelY =  0;
  727. break;
  728. case _DIRECTION_LIST_8:
  729. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  730. m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  731. else
  732. m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  733. if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
  734. m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
  735. else
  736. m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
  737. break;
  738. }
  739. }
  740. /******************************************************************************************************************
  741. 窃荐疙 : CActor::SetMoved()
  742. 累己磊 : 
  743. 累己老 : 
  744. 格利   : 
  745. 免仿   : VOID 
  746. [老磊][荐沥磊] : 荐沥郴侩
  747. *******************************************************************************************************************/
  748. VOID CActor::SetMoved()
  749. {
  750. switch ( m_bMoveDir )
  751. {
  752. case _DIRECTION_LIST_1:
  753. m_shShiftTileX =  0;
  754. m_shShiftTileY = -m_bMoveSpeed;
  755. break;
  756. case _DIRECTION_LIST_2:
  757. m_shShiftTileX =  m_bMoveSpeed;
  758. m_shShiftTileY = -m_bMoveSpeed;
  759. break;
  760. case _DIRECTION_LIST_3:
  761. m_shShiftTileX =  m_bMoveSpeed;
  762. m_shShiftTileY =  0;
  763. break;
  764. case _DIRECTION_LIST_4:
  765. m_shShiftTileX =  m_bMoveSpeed;
  766. m_shShiftTileY =  m_bMoveSpeed;
  767. break;
  768. case _DIRECTION_LIST_5:
  769. m_shShiftTileX =  0;
  770. m_shShiftTileY =  m_bMoveSpeed;
  771. break;
  772. case _DIRECTION_LIST_6:
  773. m_shShiftTileX = -m_bMoveSpeed;
  774. m_shShiftTileY =  m_bMoveSpeed;
  775. break;
  776. case _DIRECTION_LIST_7:
  777. m_shShiftTileX = -m_bMoveSpeed;
  778. m_shShiftTileY =  0;
  779. break;
  780. case _DIRECTION_LIST_8:
  781. m_shShiftTileX = -m_bMoveSpeed;
  782. m_shShiftTileY = -m_bMoveSpeed;
  783. break;
  784. }
  785. m_wPosX += m_shShiftTileX;
  786. m_wPosY += m_shShiftTileY;
  787. m_shShiftPixelX = 0;
  788. m_shShiftPixelY = 0;
  789. }
  790. /******************************************************************************************************************
  791. 窃荐疙 : CActor::OnCharDescPacket()
  792. 累己磊 : 
  793. 累己老 : 
  794. 格利   : SM_WALK, SM_DEATH, SM_TURN, SM_RUN, SM_DIGUP 皋矫瘤俊 荤侩茄促.
  795. 涝仿   : LPPACKETMSG lpPacketMsg
  796. 免仿   : VOID 
  797. [老磊][荐沥磊] : 荐沥郴侩
  798. *******************************************************************************************************************/
  799. VOID CActor::OnCharDescPacket(LPPACKETMSG lpPacketMsg)
  800. {
  801. CHARDESC stCharDesc;
  802. FEATURE stFeature;
  803. fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stCharDesc, sizeof(CHARDESC));
  804. memcpy(&stFeature, &stCharDesc.nFeature, sizeof(FEATURE));
  805. m_nState = stCharDesc.nStatus;
  806. if( m_nState & 0X2 ) m_bOpenHealth = TRUE;
  807. else m_bOpenHealth = FALSE;
  808. ChangeFeature(stFeature);
  809. }
  810. VOID CActor::OnUserName(LPPACKETMSG lpPacketMsg)
  811. {
  812. INT nPos = fnDecode6BitBuf(lpPacketMsg->szEncodeData, m_szName, sizeof(m_szName));
  813. m_szName[nPos] = '';
  814. m_dwNameClr = GetUserNameColor(lpPacketMsg->stDefMsg.wParam);
  815. }
  816. VOID CActor::OnChangeNameClr(LPPACKETMSG lpPacketMsg)
  817. {
  818. m_dwNameClr = GetUserNameColor(lpPacketMsg->stDefMsg.wParam);
  819. }
  820. VOID CActor::OnChangeLight(LPPACKETMSG lpPacketMsg)
  821. {
  822. m_bLightSize = lpPacketMsg->stDefMsg.wParam;
  823. }
  824. VOID CActor::OnOpenHealth(LPPACKETMSG lpPacketMsg)
  825. {
  826. m_bOpenHealth = TRUE;
  827. }
  828. VOID CActor::OnCloseHealth(LPPACKETMSG lpPacketMsg)
  829. {
  830. m_bOpenHealth = FALSE;
  831. }
  832. VOID CActor::OnFeatureChanged(LPPACKETMSG lpPacketMsg)
  833. {
  834. FEATURE stFeature;
  835. LONG nFeature   = MAKELONG(lpPacketMsg->stDefMsg.wParam, lpPacketMsg->stDefMsg.wTag);
  836. memcpy(&stFeature, &nFeature, sizeof(LONG));
  837. ChangeFeature(stFeature);
  838. }
  839. VOID CActor::OnHealthSpellChanged(LPPACKETMSG lpPacketMsg)
  840. {
  841. m_wHP  = lpPacketMsg->stDefMsg.wParam;
  842. m_wMP  = lpPacketMsg->stDefMsg.wTag;
  843. m_wMAXHP = lpPacketMsg->stDefMsg.wSeries;
  844. FLOAT wHPRate = (FLOAT)((FLOAT)m_wHP/(FLOAT)m_wMAXHP);
  845. m_bHPPercent  = wHPRate*100;
  846. }
  847. VOID CActor::OnWalk(LPPACKETMSG lpPacketMsg)
  848. {
  849. BYTE bDir;
  850. // m_wPosX = lpPacketMsg->stDefMsg.wParam;
  851. // m_wPosY = lpPacketMsg->stDefMsg.wTag;
  852. bDir  = LOBYTE(lpPacketMsg->stDefMsg.wSeries);
  853. m_bLightSize = HIBYTE(lpPacketMsg->stDefMsg.wSeries);
  854. OnCharDescPacket(lpPacketMsg);
  855. SetMotionFrame(_MT_MON_WALK, bDir);
  856. m_bMoveSpeed = _SPEED_WALK;
  857. SetMoving();
  858. }
  859. VOID CActor::OnTurn(LPPACKETMSG lpPacketMsg)
  860. {
  861. BYTE bDir;
  862. m_wPosX = lpPacketMsg->stDefMsg.wParam;
  863. m_wPosY = lpPacketMsg->stDefMsg.wTag;
  864. bDir  = LOBYTE(lpPacketMsg->stDefMsg.wSeries);
  865. m_bLightSize = HIBYTE(lpPacketMsg->stDefMsg.wSeries);
  866. // 侥牢檬.
  867. if ( m_stFeature.bDress == 31 )
  868. bDir = 0;
  869. OnCharDescPacket(lpPacketMsg);
  870. SetMotionFrame(_MT_MON_STAND, bDir);
  871. if( m_nState & 0X1 ) // 籍拳惑怕.
  872. {
  873. switch ( m_stFeature.bDress )
  874. {
  875. case 83: //林付脚厘.
  876. case 84: //林付龋过.
  877. case 85: //林付空.
  878. SetMotionFrame(_MT_MON_APPEAR, 0);
  879. m_dwEndFrame = m_dwFstFrame + 1;
  880. m_bCurrMtn = _MT_MON_STAND;
  881. }
  882. }
  883. }
  884. VOID CActor::OnDigup(LPPACKETMSG lpPacketMsg)
  885. {
  886. //MESSAGEBODYWL ????????
  887. BYTE bDir;
  888. m_wPosX      = lpPacketMsg->stDefMsg.wParam;
  889. m_wPosY  = lpPacketMsg->stDefMsg.wTag;
  890. bDir  = LOBYTE(lpPacketMsg->stDefMsg.wSeries);
  891. m_bLightSize = HIBYTE(lpPacketMsg->stDefMsg.wSeries);
  892. OnCharDescPacket(lpPacketMsg);
  893. m_bReverse = FALSE;
  894. switch ( m_stFeature.bDress )
  895. {
  896. case 3: 
  897. m_bReverse = TRUE;
  898. break;
  899. case 85: //林付空.
  900. bDir = 0;
  901. break;
  902. case 31: //侥牢檬.
  903. bDir = 0;
  904. m_bReverse = TRUE;
  905. break;
  906. case 56:
  907. {
  908. CMagic* pxMagic;
  909. pxMagic = new CMagic;
  910. pxMagic->CreateMagic(_SKILL_SKELLETON, m_wPosX, m_wPosY, m_wPosX, m_wPosY, NULL, 0);
  911. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  912. break;
  913. }
  914. /* case 89:
  915. {
  916. CMagic* pxMagic;
  917. pxMagic = new CMagic;
  918. pxMagic->CreateMagic(_SKILL_SINSU, m_wPosX, m_wPosY, m_wPosX, m_wPosY, NULL, 0);
  919. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  920. break;
  921. }
  922. */ }
  923. m_bAppearState = _DIG_UP;
  924. SetMotionFrame(_MT_MON_APPEAR, bDir);
  925. }
  926. VOID CActor::OnDigDown(LPPACKETMSG lpPacketMsg)
  927. {
  928. BYTE bDir;
  929. m_wPosX  = lpPacketMsg->stDefMsg.wParam;
  930. m_wPosY  = lpPacketMsg->stDefMsg.wTag;
  931. bDir  = m_bCurrDir;
  932. m_bReverse  = TRUE;
  933. switch ( m_stFeature.bDress )
  934. {
  935. case 3: 
  936. m_bReverse = FALSE;
  937. break;
  938. case 31: //侥牢檬.
  939. bDir = 0;
  940. m_bReverse = FALSE;
  941. break;
  942. }
  943. m_bAppearState = _DIG_DOWN;
  944. SetMotionFrame(_MT_MON_APPEAR, bDir);
  945. }
  946. VOID CActor::OnDeath(LPPACKETMSG lpPacketMsg)
  947. {
  948. BYTE bDir;
  949. m_wPosX = lpPacketMsg->stDefMsg.wParam;
  950. m_wPosY = lpPacketMsg->stDefMsg.wTag;
  951. bDir = lpPacketMsg->stDefMsg.wSeries;
  952. OnCharDescPacket(lpPacketMsg);
  953. SetMotionFrame(_MT_MON_DIE, bDir);
  954. if ( lpPacketMsg->stDefMsg.wIdent == SM_DEATH )
  955. {
  956. m_dwCurrFrame = m_dwEndFrame - 1;
  957. m_bIsDead = TRUE;
  958. }
  959. else 
  960. {
  961. // 阁胶磐老锭.
  962. if ( m_stFeature.bGender == _GENDER_MON )
  963. {
  964. CMagic* pxMagic;
  965. switch ( m_stFeature.bDress )
  966. {
  967. case 4: // 籍厘牢.
  968. pxMagic = new CMagic;
  969. pxMagic->CreateMagic(_MONMAGIC_EXPLODE1, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  970. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  971. break;
  972. case  5: // 官捻啊福唱.
  973. case  6: // 官磊匡.
  974. case 11: // 葛叼怜.
  975. case 19: // 饭叼啊福唱.
  976. pxMagic = new CMagic;
  977. pxMagic->CreateMagic(_MONMAGIC_SINGI_DIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  978. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  979. /* LoadEffect(&g_xGameProc.m_xImage, _MONMAGIC_DIE);
  980. m_bUseSwordEffect = TRUE;
  981. */ break;
  982. case 40: // 倾荐酒厚.
  983. pxMagic = new CMagic;
  984. pxMagic->CreateMagic(_MONMAGIC_HUSU_DIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  985. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  986. /* LoadEffect(&g_xGameProc.m_xImage, _MONMAGIC_HUSU_DIE);
  987. m_bUseSwordEffect = TRUE;
  988. */ break;
  989. case 48: // 粱厚.
  990. pxMagic = new CMagic;
  991. pxMagic->CreateMagic(_MONMAGIC_ZOMBIE_DIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  992. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  993. /* LoadEffect(&g_xGameProc.m_xImage, _MONMAGIC_ZOMBIE_DIE);
  994. m_bUseSwordEffect = TRUE;
  995. */ break;
  996. case 99: // 官坷崔靛.
  997. pxMagic = new CMagic;
  998. pxMagic->CreateMagic(_MONMAGIC_BAODIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  999. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1000. break;
  1001. default :
  1002. break;
  1003. }
  1004. }
  1005. }
  1006. }
  1007. VOID CActor::OnBackStep(LPPACKETMSG lpPacketMsg)
  1008. {
  1009. BYTE bDir;
  1010. bDir = lpPacketMsg->stDefMsg.wSeries;
  1011. m_wPosX = lpPacketMsg->stDefMsg.wParam;
  1012. m_wPosY = lpPacketMsg->stDefMsg.wTag;
  1013. SetMotionFrame(_MT_MON_WALK, bDir);
  1014. if ( m_bCurrDir < 4 ) m_bMoveDir = m_bCurrDir + 4;
  1015. else m_bMoveDir = m_bCurrDir - 4;
  1016. m_bMoveSpeed = _SPEED_WALK;
  1017. m_bBackStepFrame = 0;
  1018. m_bBackStepFrameCnt = 6;
  1019. SetBackStepMoving();
  1020. }
  1021. VOID CActor::OnStruck(LPPACKETMSG lpPacketMsg)
  1022. {
  1023. MESSAGEBODYWL stMsgBodyWl;
  1024. FEATURE   stFeature;
  1025. FLOAT wHPRate = (FLOAT)((FLOAT)lpPacketMsg->stDefMsg.wParam/(FLOAT)lpPacketMsg->stDefMsg.wTag);
  1026. WORD  wDamage = lpPacketMsg->stDefMsg.wSeries;
  1027. m_wHP   = lpPacketMsg->stDefMsg.wParam;
  1028. m_wMAXHP   = lpPacketMsg->stDefMsg.wTag;
  1029. m_bHPPercent  = wHPRate*100;
  1030. fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stMsgBodyWl, sizeof(MESSAGEBODYWL));
  1031. memcpy(&stFeature, &stMsgBodyWl.lParam1, sizeof(LONG));
  1032. ChangeFeature(stFeature);
  1033. SetMotionFrame(_MT_MON_HITTED, m_bCurrDir);
  1034. // 阁胶磐老锭.
  1035. if ( m_stHitter.bGender == _GENDER_MON )
  1036. {
  1037. CMagic* pxMagic;
  1038. switch ( m_stHitter.bDress )
  1039. {
  1040. case 2: // 纳迫肺橇.
  1041. pxMagic = new CMagic;
  1042. pxMagic->CreateMagic(_MONMAGIC_KEPAL, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1043. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1044. break;
  1045. case 8: // 癌林俺固.
  1046. case 14: // 捍侩俺固.
  1047. case 16: // 靛抄俺固.
  1048. pxMagic = new CMagic;
  1049. pxMagic->CreateMagic(_MONMAGIC_GREATANT, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1050. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1051. break;
  1052. case 67: // 盟锋脚.
  1053. pxMagic = new CMagic;
  1054. pxMagic->CreateMagic(_MONMAGIC_BIGGINE_CHAR, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1055. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1056. break;
  1057. default :
  1058. break;
  1059. }
  1060. }
  1061. ZeroMemory(&m_stHitter, sizeof(FEATURE));
  1062. }
  1063. VOID CActor::OnLighting(LPPACKETMSG lpPacketMsg)
  1064. {
  1065. WORD wTargetX, wTargetY;
  1066. INT nTargetID;
  1067. CMagic* pxMagic;
  1068. m_wPosX      = lpPacketMsg->stDefMsg.wParam;
  1069. m_wPosY  = lpPacketMsg->stDefMsg.wTag;
  1070. m_bCurrDir  = lpPacketMsg->stDefMsg.wSeries;
  1071. MESSAGEBODYWL stMsgBodyWl;
  1072. fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stMsgBodyWl, sizeof(MESSAGEBODYWL));
  1073. wTargetX = stMsgBodyWl.lParam1;
  1074. wTargetY = stMsgBodyWl.lParam2;
  1075. nTargetID = MAKELONG(stMsgBodyWl.nTag1, stMsgBodyWl.nTag2);
  1076. switch ( m_stFeature.bDress )
  1077. {
  1078. case 48: // 粱厚. 8规氢.
  1079. pxMagic = new CMagic;
  1080. pxMagic->CreateMagic(_MONMAGIC_ZOMBIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this, nTargetID);
  1081. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1082. SetMotionFrame(_MT_MON_ATTACK_A, m_bCurrDir);
  1083. break;
  1084. }
  1085. }
  1086. VOID CActor::OnFlyAxe(LPPACKETMSG lpPacketMsg)
  1087. {
  1088. WORD wTargetX, wTargetY;
  1089. INT nTargetID;
  1090. CMagic* pxMagic;
  1091. m_wPosX      = lpPacketMsg->stDefMsg.wParam;
  1092. m_wPosY  = lpPacketMsg->stDefMsg.wTag;
  1093. m_bCurrDir  = lpPacketMsg->stDefMsg.wSeries;
  1094. MESSAGEBODYW stMsgBodyW;
  1095. fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stMsgBodyW, sizeof(MESSAGEBODYW));
  1096. wTargetX = stMsgBodyW.wParam1;
  1097. wTargetY = stMsgBodyW.wParam2;
  1098. nTargetID = MAKELONG(stMsgBodyW.wTag1, stMsgBodyW.wTag2);
  1099. switch ( m_stFeature.bDress )
  1100. {
  1101. case 33: // 街档尝秦榜.
  1102. pxMagic = new CMagic;
  1103. pxMagic->CreateMagic(_MONMAGIC_DUALAXE, m_wPosX, m_wPosY, wTargetX, wTargetY, this, nTargetID);
  1104. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1105. SetMotionFrame(_MT_MON_ATTACK_A, m_bCurrDir);
  1106. break;
  1107. case 46: // 促农.
  1108. pxMagic = new CMagic;
  1109. pxMagic->CreateMagic(_MONMAGIC_CHIM, m_wPosX, m_wPosY, wTargetX, wTargetY, this, nTargetID);
  1110. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1111. SetMotionFrame(_MT_MON_ATTACK_A, m_bCurrDir);
  1112. break;
  1113. case 82: // 付泵荤.
  1114. pxMagic = new CMagic;
  1115. pxMagic->CreateMagic(_MONMAGIC_MAARROW, m_wPosX, m_wPosY, wTargetX, wTargetY, this, nTargetID);
  1116. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1117. SetMotionFrame(_MT_MON_ATTACK_A, m_bCurrDir);
  1118. break;
  1119. }
  1120. }
  1121. VOID CActor::OnHit(LPPACKETMSG lpPacketMsg)
  1122. {
  1123. BYTE bDir;
  1124. bDir = lpPacketMsg->stDefMsg.wSeries;
  1125. m_wPosX = lpPacketMsg->stDefMsg.wParam;
  1126. m_wPosY = lpPacketMsg->stDefMsg.wTag;
  1127. SetMotionFrame(_MT_MON_ATTACK_A, bDir);
  1128. // 阁胶磐老锭.
  1129. if ( m_stFeature.bGender == _GENDER_MON )
  1130. {
  1131. CMagic* pxMagic;
  1132. switch ( m_stFeature.bDress )
  1133. {
  1134. case 9: // 沸.
  1135. pxMagic = new CMagic;
  1136. pxMagic->CreateMagic(_MONMAGIC_EXPLODE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1137. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1138. break;
  1139. case 5: // 官捻啊福唱.
  1140. pxMagic = new CMagic;
  1141. pxMagic->CreateMagic(_MONMAGIC_BLACK1, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1142. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1143. break;
  1144. case 19: // 饭叼啊福唱.
  1145. pxMagic = new CMagic;
  1146. pxMagic->CreateMagic(_MONMAGIC_RED1, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1147. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1148. break;
  1149. case 45: // 快搁蓖空. 
  1150. pxMagic = new CMagic;
  1151. pxMagic->CreateMagic(_MONMAGIC_COWGHOST, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1152. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1153. break;
  1154. case 90: // 脚荐.
  1155. pxMagic = new CMagic;
  1156. pxMagic->CreateMagic(_MONMAGIC_SINSU, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1157. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1158. break;
  1159. case 43: // 拳堪快搁蓖.
  1160. pxMagic = new CMagic;
  1161. pxMagic->CreateMagic(_MONMAGIC_COWFLAME, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1162. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1163. break;
  1164. case 85: // 林付空.
  1165. pxMagic = new CMagic;
  1166. pxMagic->CreateMagic(_MONMAGIC_JUMAWANG, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1167. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1168. break;
  1169. case 67: // 盟锋脚.
  1170. pxMagic = new CMagic;
  1171. pxMagic->CreateMagic(_MONMAGIC_BIGGINE_ATT, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1172. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1173. break;
  1174. case 75: // 禁扁唱规.
  1175. pxMagic = new CMagic;
  1176. pxMagic->CreateMagic(_MONMAGIC_SSEGI, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1177. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1178. break;
  1179. case 94: // 荤绢.
  1180. pxMagic = new CMagic;
  1181. pxMagic->CreateMagic(_MONMAGIC_SANDFISH, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
  1182. g_xGameProc.m_xMagicList.AddNode(pxMagic);
  1183. break;
  1184. case 98: // 惑鞭鲍拱.
  1185. m_dwCurrEffectFrame = 50;
  1186. m_dwFstEffectFrame  = 50;
  1187. m_dwEndEffectFrame  = 60;
  1188. m_bEffectFrame = 0;
  1189. m_bEffectFrameCnt = _DEFAULT_SPELLFRAME;
  1190. LoadEffect(&g_xGameProc.m_xImage, _MONMAGIC_NUMAGUMGI, bDir);
  1191. m_bUseSwordEffect = TRUE;
  1192. break;
  1193. default :
  1194. break;
  1195. }
  1196. }
  1197. }
  1198. VOID CActor::StruckMsgReassign()
  1199. {
  1200. INT nCnt;
  1201. SHORT shLeftMsgCnt;
  1202. LPPACKETMSG lpPacketMsg;
  1203. lpPacketMsg  = NULL;
  1204. shLeftMsgCnt = m_xPacketQueue.GetCount();
  1205. if ( shLeftMsgCnt > 1 )
  1206. {
  1207. for ( nCnt = 0; nCnt < shLeftMsgCnt; nCnt++ )
  1208. {
  1209. lpPacketMsg = (LPPACKETMSG)m_xPacketQueue.PopQ();
  1210. if ( lpPacketMsg )
  1211. {
  1212. if ( lpPacketMsg->stDefMsg.wIdent == SM_STRUCK )
  1213. {
  1214. SAFE_DELETE(lpPacketMsg);
  1215. }
  1216. else
  1217. {
  1218. m_xPacketQueue.PushQ((BYTE*)lpPacketMsg);
  1219. }
  1220. }
  1221. }
  1222. }
  1223. }
  1224. /******************************************************************************************************************
  1225. 窃荐疙 : CActor::UpdatePacketState()
  1226. 累己磊 : 
  1227. 累己老 : 
  1228. 格利   : 
  1229. 免仿   : BOOL 
  1230. [老磊][荐沥磊] : 荐沥郴侩
  1231. *******************************************************************************************************************/
  1232. BOOL CActor::UpdatePacketState()
  1233. {
  1234. LPPACKETMSG lpPacketMsg = NULL;
  1235. if ( m_bCurrMtn == _MT_MON_STAND )
  1236. {
  1237. SHORT shLeftMsgCnt = m_xPacketQueue.GetCount();
  1238. if ( shLeftMsgCnt > 0 )
  1239. {
  1240. lpPacketMsg = (LPPACKETMSG)m_xPacketQueue.PopQ();
  1241. if ( shLeftMsgCnt >= 3 ) m_bMsgHurryCheck = TRUE;
  1242. else m_bMsgHurryCheck = FALSE;
  1243. if ( lpPacketMsg )
  1244. {
  1245. switch ( lpPacketMsg->stDefMsg.wIdent )
  1246. {
  1247. case SM_NOWDEATH:
  1248. case SM_DEATH: { OnDeath(lpPacketMsg); break; }
  1249. case SM_WALK: { OnWalk(lpPacketMsg); break; }
  1250. case SM_TURN: { OnTurn(lpPacketMsg); break; }
  1251. case SM_DIGUP: { OnDigup(lpPacketMsg); break; }
  1252. case SM_DIGDOWN: { OnDigDown(lpPacketMsg); break; }
  1253. case SM_FEATURECHANGED: { OnFeatureChanged(lpPacketMsg); break; }
  1254. case SM_OPENHEALTH: { OnOpenHealth(lpPacketMsg); break; }
  1255. case SM_CLOSEHEALTH: { OnCloseHealth(lpPacketMsg); break; }
  1256. case SM_CHANGELIGHT: { OnChangeLight(lpPacketMsg); break; }
  1257. case SM_CHANGENAMECOLOR: { OnChangeNameClr(lpPacketMsg); break; }
  1258. case SM_USERNAME: { OnUserName(lpPacketMsg); break; }
  1259. case SM_HEALTHSPELLCHANGED: { OnHealthSpellChanged(lpPacketMsg); break; }
  1260. case SM_BACKSTEP: { OnBackStep(lpPacketMsg); break; }
  1261. case SM_STRUCK: { OnStruck(lpPacketMsg); break; }
  1262. case SM_HIT: { OnHit(lpPacketMsg); break; }
  1263. case SM_FLYAXE: { OnFlyAxe(lpPacketMsg); break; }
  1264. case SM_LIGHTING: { OnLighting(lpPacketMsg); break; }
  1265. case SM_SKELETON:
  1266. OnWalk(lpPacketMsg);
  1267. break;
  1268. default:
  1269. {
  1270. break;
  1271. }
  1272. }
  1273. }
  1274. SAFE_DELETE(lpPacketMsg);
  1275. return TRUE;
  1276. }
  1277. }
  1278. return FALSE;
  1279. }
  1280. /******************************************************************************************************************
  1281. 窃荐疙 : CActor::LoadEffect()
  1282. 累己磊 : 
  1283. 累己老 : 
  1284. 格利   : 
  1285. 涝仿   : CImageHandler* pxImgHandler
  1286.          WORD wEffectNum
  1287.          BYTE bDir
  1288. 免仿   : BOOL 
  1289. [老磊][荐沥磊] : 荐沥郴侩
  1290. *******************************************************************************************************************/
  1291. BOOL CActor::LoadEffect(CImageHandler* pxImgHandler, WORD wEffectNum, BYTE bDir)
  1292. {
  1293. WORD wFileType;
  1294. LPEFFECTSPRINFO pstEffect = g_xSpriteInfo.GetEffectInfo(wEffectNum);
  1295. if ( pstEffect )
  1296. {
  1297. m_bEffectImgIdx = pstEffect->wImgIdx;
  1298. m_dwFstEffectFrame = pstEffect->dwFstFrm;
  1299. m_dwEndEffectFrame = pstEffect->dwEndFrm;
  1300. if ( bDir )
  1301. {
  1302. m_dwFstEffectFrame = m_dwFstEffectFrame + bDir*10;
  1303. m_dwEndEffectFrame = m_dwEndEffectFrame + bDir*10;
  1304. }
  1305. m_dwCurrEffectFrame = m_dwFstEffectFrame;
  1306. m_bEffectFrame = 0;
  1307. m_bLightRadius[0] = pstEffect->bLightRadius[0];
  1308. m_bLightRadius[1] = pstEffect->bLightRadius[1];
  1309. m_bLightColor[0][0] = pstEffect->bLightColor[0][0];
  1310. m_bLightColor[0][1] = pstEffect->bLightColor[0][1];
  1311. m_bLightColor[0][2] = pstEffect->bLightColor[0][2];
  1312. m_bLightColor[1][0] = pstEffect->bLightColor[1][0];
  1313. m_bLightColor[1][1] = pstEffect->bLightColor[1][1];
  1314. m_bLightColor[1][2] = pstEffect->bLightColor[1][2];
  1315. for ( INT nCnt = m_dwFstEffectFrame; nCnt < m_dwEndEffectFrame; nCnt++ )
  1316. {
  1317. if ( m_bEffectImgIdx == _IMAGE_MAGIC )
  1318. {
  1319. wFileType = _TEXTR_FILE_MAGIC;
  1320. }
  1321. else if ( m_bEffectImgIdx == _IMAGE_MONMAGIC )
  1322. {
  1323. wFileType = _TEXTR_FILE_MONMAGIC;
  1324. }
  1325. pxImgHandler->AddTextr(wFileType, m_bEffectImgIdx, nCnt);
  1326. }
  1327. return TRUE;
  1328. }
  1329. return FALSE;
  1330. }
  1331. /******************************************************************************************************************
  1332. 窃荐疙 : CActor::DrawEffect()
  1333. 累己磊 : 
  1334. 累己老 : 
  1335. 格利   : 
  1336. 免仿   : BOOL 
  1337. [老磊][荐沥磊] : 荐沥郴侩
  1338. *******************************************************************************************************************/
  1339. BOOL CActor::DrawEffect()
  1340. {
  1341. if ( g_xMainWnd.Get3DDevice() )
  1342. {
  1343. if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()) )
  1344. {
  1345. WORD   wFileType;
  1346. D3DVECTOR vTrans;
  1347. D3DMATRIX matTrans;
  1348. D3DMATRIX matScale;
  1349. D3DMATRIX matRot;
  1350. D3DMATRIX matWorld;
  1351. D3DMATRIX matWorldOriginal;
  1352. g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
  1353. D3DMATERIAL7 mtrl;
  1354. CWHWilImageData* pxWilImg;
  1355. if ( m_bUseEffect || m_bUseSwordEffect )
  1356. {
  1357. BOOL bIndexSetted = FALSE;
  1358. if ( m_bUseEffect )
  1359. {
  1360. pxWilImg = &g_xGameProc.m_xImage.m_xImageList[m_bEffectImgIdx];
  1361. bIndexSetted = pxWilImg->NewSetIndex(m_dwCurrEffectFrame);
  1362. }
  1363. else
  1364. {
  1365. pxWilImg = &g_xGameProc.m_xImage.m_xImageList[m_bEffectImgIdx];
  1366. m_dwCurrEffectFrame = m_dwFstEffectFrame + m_dwCurrFrame - m_dwFstFrame;
  1367. bIndexSetted = pxWilImg->NewSetIndex(m_dwCurrEffectFrame);
  1368. }
  1369. if ( bIndexSetted )
  1370. {
  1371.   vTrans.x = (FLOAT)m_shScrnPosX+(FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shWidth/2+pxWilImg->m_lpstNewCurrWilImageInfo->shPX-400; 
  1372. vTrans.y = (FLOAT)-m_shScrnPosY-(FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shHeight/2-pxWilImg->m_lpstNewCurrWilImageInfo->shPY+300; 
  1373. vTrans.z = 0;
  1374. D3DUtil_SetTranslateMatrix(matTrans, vTrans);
  1375. D3DUtil_SetScaleMatrix(matScale, (FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shWidth, (FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shHeight, 0.0f);
  1376. D3DMath_MatrixMultiply(matWorld, matScale, matTrans);
  1377. g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld);
  1378. if ( m_bEffectImgIdx == _IMAGE_MAGIC )
  1379. {
  1380. wFileType = _TEXTR_FILE_MAGIC;
  1381. }
  1382. else if ( m_bEffectImgIdx == _IMAGE_MONMAGIC )
  1383. {
  1384. wFileType = _TEXTR_FILE_MONMAGIC;
  1385. }
  1386. LPDIRECTDRAWSURFACE7 lpddsTextr = g_xGameProc.m_xImage.GetTextrImg(wFileType, m_bEffectImgIdx, m_dwCurrEffectFrame);
  1387. g_xMainWnd.Get3DDevice()->SetTexture(0, lpddsTextr);
  1388. // g_xMainWnd.Get3DDevice()->SetTexture(0, D3DWILTextr_GetSurface(pxWilImg->m_szWilFileName, m_dwCurrEffectFrame));
  1389. D3DUtil_InitMaterial(mtrl, 
  1390.  (FLOAT)255/255.0f,
  1391.  (FLOAT)255/255.0f, 
  1392.  (FLOAT)255/255.0f);
  1393. mtrl.diffuse.a = 0/255.0f;
  1394. g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
  1395. SetBlendRenderState(g_xMainWnd.Get3DDevice(), _BLEND_LIGHTINV, mtrl);
  1396. g_xMainWnd.Get3DDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, m_avBoard, 4, NULL);
  1397. // 盔惑汗蓖.
  1398. ZeroMemory(&mtrl, sizeof(mtrl));
  1399. mtrl.diffuse.r = mtrl.diffuse.g = mtrl.diffuse.b = 0.1f;
  1400. mtrl.ambient.r = mtrl.ambient.g = mtrl.ambient.b = 1.0f;
  1401. g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
  1402. ResetBlendenderState(g_xMainWnd.Get3DDevice());
  1403. g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
  1404. }
  1405. if ( m_bUseEffect )
  1406. {
  1407. if ( m_bEffectFrame < m_bEffectFrameCnt / 2 )
  1408. {
  1409. m_bLightRadius[0] = m_bEffectFrame;
  1410. m_bLightRadius[1] = m_bEffectFrame+1;
  1411. }
  1412. else
  1413. {
  1414. m_bLightRadius[0] = m_bEffectFrameCnt - m_bEffectFrame -1;
  1415. m_bLightRadius[1] = m_bEffectFrameCnt - m_bEffectFrame;
  1416. }
  1417. g_xGameProc.m_xLightFog.SetLightRadiusWithRing(
  1418.   m_shScrnPosX + _CELL_WIDTH/2,
  1419.      m_shScrnPosY + _CELL_HEIGHT/2, 
  1420.   m_bLightRadius[0], m_bLightColor[0][0], m_bLightColor[0][1], m_bLightColor[0][2], 
  1421.   m_bLightRadius[1], m_bLightColor[1][0], m_bLightColor[1][1], m_bLightColor[1][2]);
  1422. }
  1423. else if ( m_bUseSwordEffect )
  1424. {
  1425. if ( m_dwEndEffectFrame - m_dwFstEffectFrame > 8 )
  1426. {
  1427. m_bLightRadius[0] = (m_dwCurrEffectFrame - m_dwFstEffectFrame)/2 + 2;
  1428. m_bLightRadius[1] = (m_dwCurrEffectFrame - m_dwFstEffectFrame)/2 + 3;
  1429. }
  1430. else
  1431. {
  1432. m_bLightRadius[0] = m_dwCurrEffectFrame - m_dwFstEffectFrame + 2;
  1433. m_bLightRadius[1] = m_dwCurrEffectFrame - m_dwFstEffectFrame + 3;
  1434. }
  1435. g_xGameProc.m_xLightFog.SetLightRadiusWithRing(
  1436.   m_shScrnPosX + _CELL_WIDTH/2,
  1437.      m_shScrnPosY + _CELL_HEIGHT/2, 
  1438.   m_bLightRadius[0], m_bLightColor[0][0], m_bLightColor[0][1], m_bLightColor[0][2], 
  1439.   m_bLightRadius[1], m_bLightColor[1][0], m_bLightColor[1][1], m_bLightColor[1][2]);
  1440. }
  1441. }
  1442. g_xMainWnd.Get3DDevice()->EndScene();
  1443. return S_OK;
  1444. }
  1445. }
  1446. return E_FAIL;
  1447. }
  1448. /******************************************************************************************************************
  1449. 窃荐疙 : CActor::UpdateMotionState()
  1450. 累己磊 : 
  1451. 累己老 : 
  1452. 格利   : 
  1453. 涝仿   : INT nLoopTime
  1454.          SHORT shStartViewTileX
  1455.          SHORT shStartViewTileY
  1456.          SHORT shViewOffsetX
  1457.          SHORT shViewOffsetY
  1458. 免仿   : VOID 
  1459. [老磊][荐沥磊] : 荐沥郴侩
  1460. *******************************************************************************************************************/
  1461. VOID CActor::UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime)
  1462. {
  1463. m_wABlendCurrDelay += nLoopTime;
  1464. if ( m_wABlendCurrDelay >= m_wABlendDelay )
  1465. {
  1466. m_wABlendCurrDelay = 0;
  1467. m_wABlendDelay    = 0;
  1468. m_bABlendRev    = FALSE;
  1469. }
  1470. if ( m_bCurrMtn == _MT_MON_DIE && m_dwCurrFrame >= m_dwEndFrame-1 )
  1471. {
  1472. m_bIsDead = TRUE;
  1473. }
  1474. if ( m_bIsDead )
  1475. {
  1476. SetMotionFrame(_MT_MON_DIE, m_bCurrDir);
  1477. m_dwCurrFrame = m_dwEndFrame - 1;
  1478. return;
  1479. }
  1480. if ( UpdateMove(bIsMoveTime) )
  1481. {
  1482. UpdatePacketState();
  1483. return;
  1484. }
  1485. else
  1486. {
  1487. m_wCurrDelay    += nLoopTime;
  1488. if ( m_wCurrDelay > m_wDelay )
  1489. {
  1490. m_wCurrDelay = 0;
  1491. if ( m_dwCurrFrame < m_dwEndFrame )
  1492. {
  1493. m_dwCurrFrame++;
  1494. PlayActSound();
  1495. if ( m_bMsgHurryCheck )
  1496. {
  1497. m_wDelay = m_wDelay/2;
  1498. m_bMsgHurryCheck = FALSE;
  1499. }
  1500. }
  1501. }
  1502. UpdatePacketState();
  1503. if ( m_dwCurrFrame >= m_dwEndFrame )
  1504. {
  1505. m_shShiftTileX = 0;
  1506. m_shShiftTileY = 0;
  1507. m_shShiftPixelX = 0;
  1508. m_shShiftPixelY = 0;
  1509. m_bReverse = FALSE;
  1510. m_dwCurrEffectFrame = 0;
  1511. m_dwFstEffectFrame = 0;
  1512. m_dwEndEffectFrame = 0;
  1513. m_bEffectFrame = 0;
  1514. m_bEffectFrameCnt = _DEFAULT_SPELLFRAME;
  1515. m_bUseEffect = FALSE;
  1516. m_bUseSwordEffect = FALSE;
  1517. m_dwCurrFrame = m_dwFstFrame;
  1518. SetMotionFrame(_MT_MON_STAND, m_bCurrDir);
  1519. if( m_nState & 0X1 ) // 籍拳惑怕.
  1520. {
  1521. switch ( m_stFeature.bDress )
  1522. {
  1523. case 83: //林付脚厘.
  1524. case 84: //林付龋过.
  1525. case 85: //林付空.
  1526. SetMotionFrame(_MT_MON_APPEAR, 0);
  1527. m_dwEndFrame = m_dwFstFrame + 1;
  1528. m_bCurrMtn = _MT_MON_STAND;
  1529. }
  1530. }
  1531. if ( m_bAppearState == _DIG_DOWN )
  1532. m_bAppearState = _DIG_DOWNDEL;
  1533. }
  1534. }
  1535. }
  1536. /******************************************************************************************************************
  1537. 窃荐疙 : CActor::UpdateMove(BOOL bIsMoveTime)
  1538. 累己磊 : 
  1539. 累己老 : 
  1540. 格利   : 
  1541. 免仿   : BOOL
  1542. [老磊][荐沥磊] : 荐沥郴侩
  1543. *******************************************************************************************************************/
  1544. BOOL CActor::UpdateMove(BOOL bIsMoveTime)
  1545. {
  1546. if ( m_bCurrMtn == _MT_MON_WALK || m_bCurrMtn == _MT_PUSHBACK )
  1547. {
  1548. m_wCurrDelay = 0;
  1549. if ( bIsMoveTime )
  1550. {
  1551. if ( m_bBackStepFrameCnt )
  1552. {
  1553. m_dwCurrFrame += 2;
  1554. }
  1555. else
  1556. {
  1557. m_dwCurrFrame++;
  1558. if ( m_bMsgHurryCheck )
  1559. {
  1560. m_dwCurrFrame++;
  1561. }
  1562. }
  1563. if ( m_dwCurrFrame >= m_dwEndFrame-m_bMoveNextFrmCnt && !m_bIsMoved )
  1564. {
  1565. SetMoved();
  1566. m_bIsMoved = TRUE;
  1567. }
  1568. }
  1569. // 楷加利牢 橇饭烙 吝俊辑 秦具且老.
  1570. if ( m_dwCurrFrame >= m_dwEndFrame )
  1571. {
  1572. m_dwCurrFrame = m_dwEndFrame - 1;
  1573. m_shShiftTileX = 0;
  1574. m_shShiftTileY = 0;
  1575. m_shShiftPixelX = 0;
  1576. m_shShiftPixelY = 0;
  1577. m_dwCurrEffectFrame = 0;
  1578. m_dwFstEffectFrame = 0;
  1579. m_dwEndEffectFrame = 0;
  1580. m_bEffectFrame = 0;
  1581. m_bUseEffect = FALSE;
  1582. m_bUseSwordEffect = FALSE;
  1583. m_dwCurrFrame = m_dwFstFrame;
  1584. m_bBackStepFrame = 0;
  1585. m_bBackStepFrameCnt = 0;
  1586. m_bIsMoved = FALSE;
  1587. SetMotionFrame(_MT_MON_STAND, m_bCurrDir);
  1588. }
  1589. else if ( m_dwCurrFrame < m_dwEndFrame )
  1590. {
  1591. if ( m_bCurrMtn != _MT_PUSHBACK )
  1592. SetMoving();
  1593. else
  1594. SetBackStepMoving();
  1595. }
  1596. return TRUE;
  1597. }
  1598. return FALSE;
  1599. }
  1600. /******************************************************************************************************************
  1601. 窃荐疙 : CActor::DrawActor()
  1602. 累己磊 : 
  1603. 累己老 : 
  1604. 格利   : 
  1605. 涝仿   : BOOL bFocused
  1606.          BOOL bShadowAblended
  1607. 免仿   : VOID 
  1608. [老磊][荐沥磊] : 荐沥郴侩
  1609. *******************************************************************************************************************/
  1610. BOOL CActor::DrawActor(CMapHandler* pxMap, BOOL bFocused, BOOL bShadowAblended, BOOL bUseScrnPos, BOOL bDrawShadow)
  1611. {
  1612. // 谅钎贸府.
  1613. if ( bUseScrnPos )
  1614. {
  1615. m_shScrnPosX = (m_wPosX - pxMap->m_shStartViewTileX) * _CELL_WIDTH + _VIEW_CELL_X_START - pxMap->m_shViewOffsetX + m_shShiftPixelX;
  1616. m_shScrnPosY = (m_wPosY - pxMap->m_shStartViewTileY) * _CELL_HEIGHT+ _VIEW_CELL_Y_START - pxMap->m_shViewOffsetY + m_shShiftPixelY;
  1617. }
  1618. BYTE bShadowType;
  1619. SHORT shShadowPX;
  1620. SHORT shShadowPY;
  1621. if ( m_pxActorImage )
  1622. {
  1623. SHORT shPX, shPY;
  1624. DWORD dwCurrFrm;
  1625. if ( !m_bReverse )
  1626. {
  1627. if ( m_bBackStepFrameCnt ) dwCurrFrm = m_dwEndFrame - (m_dwCurrFrame - m_dwFstFrame) -1;
  1628. else dwCurrFrm = m_dwCurrFrame;
  1629. }
  1630. else
  1631. {
  1632. if ( m_bBackStepFrameCnt ) dwCurrFrm = m_dwCurrFrame;
  1633. else dwCurrFrm = m_dwEndFrame - (m_dwCurrFrame - m_dwFstFrame) -1;
  1634. }
  1635. if ( m_pxActorImage->NewSetIndex(dwCurrFrm) )
  1636. {
  1637. shPX = m_pxActorImage->m_lpstNewCurrWilImageInfo->shPX;
  1638. shPY = m_pxActorImage->m_lpstNewCurrWilImageInfo->shPY;
  1639. bShadowType = m_pxActorImage->m_lpstNewCurrWilImageInfo->bShadow;
  1640. shShadowPX  = m_pxActorImage->m_lpstNewCurrWilImageInfo->shShadowPX;
  1641. shShadowPY  = m_pxActorImage->m_lpstNewCurrWilImageInfo->shShadowPY;
  1642. SetRect(&m_rcActor, m_shScrnPosX + shPX, m_shScrnPosY + shPY, 
  1643. m_shScrnPosX + shPX + m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth, 
  1644. m_shScrnPosY + shPY + m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight);
  1645. if ( ( m_rcActor.right - m_rcActor.left ) > _CELL_WIDTH + _TARGETRGN_GAPX )
  1646. {
  1647. m_rcTargetRgn.left  = m_rcActor.left + ( (m_rcActor.right - m_rcActor.left) - (_CELL_WIDTH + _TARGETRGN_GAPX) )/2;
  1648. m_rcTargetRgn.right = m_rcActor.left + ( (m_rcActor.right - m_rcActor.left) + (_CELL_WIDTH + _TARGETRGN_GAPX) )/2;
  1649. }
  1650. else
  1651. {
  1652. m_rcTargetRgn.left  = m_rcActor.left;
  1653. m_rcTargetRgn.right = m_rcActor.right;
  1654. }
  1655. if ( ( m_rcActor.bottom - m_rcActor.top ) > _CELL_HEIGHT + _TARGETRGN_GAPY )
  1656. {
  1657. m_rcTargetRgn.top    = m_rcActor.top + ( (m_rcActor.bottom - m_rcActor.top) - (_CELL_HEIGHT + _TARGETRGN_GAPY) )/2;
  1658. m_rcTargetRgn.bottom = m_rcActor.top + ( (m_rcActor.bottom - m_rcActor.top) + (_CELL_HEIGHT + _TARGETRGN_GAPY) )/2;
  1659. }
  1660. else
  1661. {
  1662. m_rcTargetRgn.top    = m_rcActor.top;
  1663. m_rcTargetRgn.bottom = m_rcActor.bottom;
  1664. }
  1665. INT nStartX1 = m_shScrnPosX + shShadowPX;
  1666. INT nStartY1 = m_shScrnPosY + shShadowPY;
  1667. BYTE bOpaRate = 70;
  1668. WORD wState   = GetCharState();
  1669. // 阁胶磐 弊覆磊 颇老 利侩.
  1670. if ( bDrawShadow )
  1671. {
  1672. CWHWilImageData* pxSahdowImage;
  1673. pxSahdowImage = &g_xGameProc.m_xImage.m_xImageList[m_bActorImgIdx+_MAX_MONSTER_IMAGE];
  1674. if ( pxSahdowImage->NewSetIndex(dwCurrFrm) )
  1675. {
  1676. SHORT shShadowPX, shShadowPY;
  1677. if ( m_wABlendDelay || wState==_STATE_ABLEND || bShadowAblended )
  1678. {
  1679. shShadowPX = pxSahdowImage->m_lpstNewCurrWilImageInfo->shPX;
  1680. shShadowPY = pxSahdowImage->m_lpstNewCurrWilImageInfo->shPY;
  1681. g_xMainWnd.DrawWithABlendCompDataWithBackBuffer(m_shScrnPosX+shShadowPX, m_shScrnPosY+shShadowPY, pxSahdowImage->m_lpstNewCurrWilImageInfo->shWidth, pxSahdowImage->m_lpstNewCurrWilImageInfo->shHeight, (WORD*)pxSahdowImage->m_pbCurrImage,
  1682. _CLIP_WIDTH, _CLIP_HEIGHT, 0XFFFF, 0XFFFF, bOpaRate);
  1683. }
  1684. else
  1685. {
  1686. shShadowPX = pxSahdowImage->m_lpstNewCurrWilImageInfo->shPX;
  1687. shShadowPY = pxSahdowImage->m_lpstNewCurrWilImageInfo->shPY;
  1688. if ( !m_bIsDead )
  1689. g_xMainWnd.DrawWithImageForCompClipRgn(m_shScrnPosX+shShadowPX, m_shScrnPosY+shShadowPY, pxSahdowImage->m_lpstNewCurrWilImageInfo->shWidth, pxSahdowImage->m_lpstNewCurrWilImageInfo->shHeight, (WORD*)pxSahdowImage->m_pbCurrImage,
  1690.    _CLIP_WIDTH, _CLIP_HEIGHT, 0XFFFF, 0XFFFF, bFocused);
  1691. }
  1692. }
  1693. // 拌魂秦辑 弊府扁.
  1694. else
  1695. {
  1696. // 弊覆磊甫 弊赴促.
  1697. if ( m_wABlendDelay || wState==_STATE_ABLEND || bShadowAblended )
  1698. {
  1699. if ( bOpaRate < 0 && bOpaRate > 100 ) bOpaRate  = 0;
  1700. bShadowAblended = TRUE;
  1701. }
  1702. if ( !m_bIsDead )
  1703. {
  1704. g_xMainWnd.DrawWithShadowABlend(
  1705. nStartX1, nStartY1, 
  1706. m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth,
  1707. m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight,
  1708. (WORD*)m_pxActorImage->m_pbCurrImage,
  1709. _CLIP_WIDTH, _CLIP_HEIGHT, g_xGameProc.m_wShadowClr, bShadowAblended, bShadowType, bOpaRate);
  1710. }
  1711. else
  1712. {
  1713. g_xMainWnd.DrawWithShadowABlend(
  1714. m_rcActor.left+3, m_rcActor.top+2, 
  1715. m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth,
  1716. m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight,
  1717. (WORD*)m_pxActorImage->m_pbCurrImage,
  1718. _CLIP_WIDTH, _CLIP_HEIGHT, g_xGameProc.m_wShadowClr, bShadowAblended, 50, bOpaRate);
  1719. }
  1720. }
  1721. }
  1722. if ( m_wABlendDelay )
  1723. {
  1724. if ( !m_bABlendRev )
  1725. bOpaRate = 100 - ( (m_wABlendCurrDelay * 100) / m_wABlendDelay );
  1726. else
  1727. bOpaRate = ( (m_wABlendCurrDelay * 100) / m_wABlendDelay );
  1728. }
  1729. if ( bOpaRate < 0 && bOpaRate > 100 ) bOpaRate  = 0;
  1730. if ( bFocused )
  1731. {
  1732. if ( !m_bABlendRev )
  1733. bOpaRate -= 20;
  1734. else
  1735. bOpaRate += 20;
  1736. }
  1737. DrawWithEffected(m_rcActor.left, m_rcActor.top, m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth, m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight, (WORD*)m_pxActorImage->m_pbCurrImage, 
  1738.  0XFFFF, 0XFFFF, bFocused, bOpaRate, wState);
  1739. DrawEffect();
  1740. return TRUE;
  1741. }
  1742. }
  1743. return FALSE;
  1744. }
  1745. /******************************************************************************************************************
  1746. 窃荐疙 : CActor::DrawHPBar()
  1747. 累己磊 : 
  1748. 累己老 : 
  1749. 格利   : 
  1750. 免仿   : VOID 
  1751. [老磊][荐沥磊] : 荐沥郴侩
  1752. *******************************************************************************************************************/
  1753. VOID CActor::DrawHPBar()
  1754. {
  1755. if ( m_bOpenHealth )
  1756. {
  1757. FLOAT fHPPercent = (FLOAT)((FLOAT)m_bHPPercent/100);
  1758. RECT rcHP = {0, 0, (36*fHPPercent), 4};
  1759.   g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].NewSetIndex(2);
  1760.   g_xMainWnd.DrawWithImageForComp(
  1761. m_shScrnPosX+7,
  1762. m_shScrnPosY-53,
  1763. g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].m_lpstNewCurrWilImageInfo->shWidth,
  1764. g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].m_lpstNewCurrWilImageInfo->shHeight,
  1765. (WORD*)g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].m_pbCurrImage);
  1766. g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].NewSetIndex(3);
  1767.   g_xMainWnd.DrawWithImageForComp(
  1768. m_shScrnPosX+7,
  1769. m_shScrnPosY-53,
  1770. rcHP,
  1771. (WORD*)g_xGameProc.m_xImage.m_xImageList[_IMAGE_PROGUSE].m_pbCurrImage);
  1772. }
  1773. }
  1774. /******************************************************************************************************************
  1775. 窃荐疙 : CActor::DrawName()
  1776. 累己磊 : 
  1777. 累己老 : 
  1778. 格利   : 
  1779. 免仿   : VOID 
  1780. [老磊][荐沥磊] : 荐沥郴侩
  1781. *******************************************************************************************************************/
  1782. VOID CActor::DrawName()
  1783. {
  1784. SIZE sizeLen;
  1785. sizeLen = g_xMainWnd.GetStrLength(NULL, NULL, m_szName);
  1786. // RECT rc = {m_shScrnPosX+(_CELL_WIDTH-sizeLen.cx)/2, m_shScrnPosY-25, m_shScrnPosX+(_CELL_WIDTH+sizeLen.cx)/2, m_shScrnPosY-25+20};
  1787. RECT rc = {m_rcActor.left + (m_rcActor.right-m_rcActor.left-sizeLen.cx)/2, m_rcActor.top + (m_rcActor.bottom-m_rcActor.top-sizeLen.cy)/2, 
  1788.        m_rcActor.left + (m_rcActor.right-m_rcActor.left+sizeLen.cx)/2, m_rcActor.top + (m_rcActor.bottom-m_rcActor.top+sizeLen.cy)/2};
  1789. RECT rcLeft = {rc.left+1, rc.top-1, rc.right+1, rc.bottom-1};
  1790. g_xMainWnd.PutsHan(NULL, rc, RGB(10, 10, 10), RGB(0, 0, 0), m_szName);
  1791. g_xMainWnd.PutsHan(NULL, rcLeft, m_dwNameClr, RGB(0, 0, 0), m_szName);
  1792. }
  1793. VOID CActor::ChatMsgAdd()
  1794. {
  1795. CHAR szDivied[MAX_PATH*2];
  1796. ZeroMemory(szDivied, MAX_PATH*2);
  1797. g_xMainWnd.StringDivide(_CHAT_WIDTH, m_nDividedChatLine, m_szChatMsg, szDivied);
  1798. sscanf(szDivied, "%[^`]%*c %[^`]%*c %[^`]%*c %[^`]%*c %[^`]%*c", 
  1799.    m_szChatMsgArg[0], m_szChatMsgArg[1], m_szChatMsgArg[2], m_szChatMsgArg[3], m_szChatMsgArg[4]);
  1800. m_wCurrChatDelay = 0;
  1801. }
  1802. VOID CActor::ShowMessage(INT nLoopTime)
  1803. {
  1804. if ( m_szChatMsg[0] != NULL )
  1805. {
  1806. m_wCurrChatDelay += nLoopTime;
  1807. }
  1808. if ( m_wCurrChatDelay > 3000 )
  1809. {
  1810. m_wCurrChatDelay = 0;
  1811. ZeroMemory(m_szChatMsg, MAX_PATH);
  1812. ZeroMemory(m_szChatMsgArg, MAX_PATH*5);
  1813. }
  1814. if ( m_szChatMsg[0] != NULL )
  1815. {
  1816. INT nStartX = m_shScrnPosX + 28 - _CHAT_WIDTH/2;
  1817. INT nStartY;
  1818. /* if ( m_stFeatureEx.bHorse == _HORSE_NONE )
  1819. nStartY = m_shScrnPosY - 55;
  1820. else
  1821. */ nStartY = m_shScrnPosY - 55;
  1822. RECT rcBack;
  1823. if ( m_nDividedChatLine == 1 )
  1824. {
  1825. SIZE sizeLen;
  1826. sizeLen = g_xMainWnd.GetStrLength(NULL, NULL, m_szChatMsgArg[0]);
  1827. nStartX = m_shScrnPosX + 28 - sizeLen.cx/2;
  1828. SetRect(&rcBack, nStartX, nStartY-14-4, nStartX+sizeLen.cx, nStartY);
  1829. }
  1830. else
  1831. SetRect(&rcBack, nStartX, nStartY-m_nDividedChatLine*14-4, nStartX+_CHAT_WIDTH, nStartY);
  1832. if ( g_xMainWnd.Get3DDevice() )
  1833. {
  1834. if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()) )
  1835. {
  1836. D3DVECTOR vTrans;
  1837. D3DMATRIX matTrans;
  1838. D3DMATRIX matScale;
  1839. D3DMATRIX matWorld;
  1840. D3DMATRIX matWorldOriginal;
  1841. g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
  1842. D3DMATERIAL7 mtrl;
  1843. vTrans.x = (FLOAT)nStartX-400+(rcBack.right-rcBack.left)/2;  
  1844. vTrans.y = (FLOAT)-nStartY+300+(rcBack.bottom-rcBack.top)/2; 
  1845. vTrans.z = 0;
  1846. D3DUtil_SetTranslateMatrix(matTrans, vTrans);
  1847. D3DUtil_SetScaleMatrix(matScale, (FLOAT)rcBack.right-rcBack.left, (FLOAT)rcBack.bottom-rcBack.top, 0.0f);
  1848. D3DMath_MatrixMultiply(matWorld, matScale, matTrans);
  1849. g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld);
  1850. D3DUtil_InitMaterial(mtrl, 
  1851.  (FLOAT)80/255.0f,
  1852.  (FLOAT)60/255.0f, 
  1853.  (FLOAT)40/255.0f);
  1854. mtrl.diffuse.a = 120/255.0f;
  1855. g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
  1856. g_xMainWnd.Get3DDevice()->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
  1857. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, TRUE);
  1858. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
  1859. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAOP,   D3DTOP_MODULATE);
  1860. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
  1861. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
  1862. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA);
  1863. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
  1864. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA);
  1865. g_xMainWnd.Get3DDevice()->SetTexture(0, NULL);
  1866. g_xMainWnd.Get3DDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, m_avBoard, 4, NULL);
  1867. // 盔惑汗蓖.
  1868. ZeroMemory(&mtrl, sizeof(mtrl));
  1869. mtrl.diffuse.r = mtrl.diffuse.g = mtrl.diffuse.b = 0.1f;
  1870. mtrl.ambient.r = mtrl.ambient.g = mtrl.ambient.b = 1.0f;
  1871. g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
  1872. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
  1873. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_COLOROP,   D3DTOP_MODULATE);
  1874. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
  1875. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
  1876. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1);
  1877. g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
  1878. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE);
  1879. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, FALSE);
  1880. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND , D3DBLEND_ONE);
  1881. g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO);
  1882. g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
  1883. g_xMainWnd.Get3DDevice()->EndScene();
  1884. }
  1885. }
  1886. for ( INT nCnt = 0; nCnt < m_nDividedChatLine; nCnt++ )
  1887. {
  1888. SIZE sizeLen;
  1889. sizeLen = g_xMainWnd.GetStrLength(NULL, NULL, m_szChatMsgArg[nCnt]);
  1890. if ( m_nDividedChatLine != 1 )
  1891. {
  1892. if ( nCnt == m_nDividedChatLine-1 )
  1893. {
  1894. nStartX += (_CHAT_WIDTH-sizeLen.cx)/2;
  1895. }
  1896. }
  1897. g_xMainWnd.PutsHan(g_xMainWnd.GetBackBuffer(),
  1898.    nStartX, nStartY-(m_nDividedChatLine-nCnt)*14,
  1899.    RGB(255,255,255), RGB(0,0,0), m_szChatMsgArg[nCnt]);
  1900. }
  1901. }
  1902. }
  1903. /******************************************************************************************************************
  1904. CNPC Class
  1905. *******************************************************************************************************************/
  1906. /******************************************************************************************************************
  1907. 窃荐疙 : CNPC::DrawActor()
  1908. 累己磊 : 
  1909. 累己老 : 
  1910. 格利   : 
  1911. 涝仿   : CMapHandler* pxMap
  1912.          BOOL bFocused
  1913.          BOOL bShadowAblended
  1914. 免仿   : BOOL 
  1915. [老磊][荐沥磊] : 荐沥郴侩
  1916. *******************************************************************************************************************/
  1917. BOOL CNPC::DrawActor(CMapHandler* pxMap, BOOL bFocused, BOOL bShadowAblended, BOOL bUseScrnPos, BOOL bDrawShadow)
  1918. {
  1919. // 谅钎贸府.
  1920. m_shScrnPosX = (m_wPosX - pxMap->m_shStartViewTileX) * _CELL_WIDTH + _VIEW_CELL_X_START - pxMap->m_shViewOffsetX + m_shShiftPixelX;
  1921. m_shScrnPosY = (m_wPosY - pxMap->m_shStartViewTileY) * _CELL_HEIGHT+ _VIEW_CELL_Y_START - pxMap->m_shViewOffsetY + m_shShiftPixelY;
  1922. BYTE bShadowType;
  1923. SHORT shShadowPX;
  1924. SHORT shShadowPY;
  1925. if ( m_pxActorImage )
  1926. {
  1927. SHORT shPX, shPY;
  1928. m_pxActorImage->NewSetIndex(m_dwCurrFrame);
  1929. shPX = m_pxActorImage->m_lpstNewCurrWilImageInfo->shPX;
  1930. shPY = m_pxActorImage->m_lpstNewCurrWilImageInfo->shPY;
  1931. bShadowType = m_pxActorImage->m_lpstNewCurrWilImageInfo->bShadow;
  1932. shShadowPX  = m_pxActorImage->m_lpstNewCurrWilImageInfo->shShadowPX;
  1933. shShadowPY  = m_pxActorImage->m_lpstNewCurrWilImageInfo->shShadowPY;
  1934. SetRect(&m_rcActor, m_shScrnPosX + shPX, m_shScrnPosY + shPY, 
  1935. m_shScrnPosX + shPX + m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth, 
  1936. m_shScrnPosY + shPY + m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight);
  1937. if ( ( m_rcActor.right - m_rcActor.left ) > _CELL_WIDTH + _TARGETRGN_GAPX )
  1938. {
  1939. m_rcTargetRgn.left  = m_rcActor.left + ( (m_rcActor.right - m_rcActor.left) - (_CELL_WIDTH + _TARGETRGN_GAPX) )/2;
  1940. m_rcTargetRgn.right = m_rcActor.left + ( (m_rcActor.right - m_rcActor.left) + (_CELL_WIDTH + _TARGETRGN_GAPX) )/2;
  1941. }
  1942. else
  1943. {
  1944. m_rcTargetRgn.left  = m_rcActor.left;
  1945. m_rcTargetRgn.right = m_rcActor.right;
  1946. }
  1947. if ( ( m_rcActor.bottom - m_rcActor.top ) > _CELL_HEIGHT + _TARGETRGN_GAPY )
  1948. {
  1949. m_rcTargetRgn.top    = m_rcActor.top + ( (m_rcActor.bottom - m_rcActor.top) - (_CELL_HEIGHT + _TARGETRGN_GAPY) )/2;
  1950. m_rcTargetRgn.bottom = m_rcActor.top + ( (m_rcActor.bottom - m_rcActor.top) + (_CELL_HEIGHT + _TARGETRGN_GAPY) )/2;
  1951. }
  1952. else
  1953. {
  1954. m_rcTargetRgn.top    = m_rcActor.top;
  1955. m_rcTargetRgn.bottom = m_rcActor.bottom;
  1956. }
  1957. // 某腐磐 弊覆磊.
  1958. INT nStartX1 = m_shScrnPosX + shShadowPX;
  1959. INT nStartY1 = m_shScrnPosY + shShadowPY;
  1960. BYTE bOpaRate = 70;
  1961. WORD wState   = GetCharState();
  1962. // 弊覆磊甫 弊赴促.
  1963. if ( m_wABlendDelay || wState==_STATE_ABLEND )
  1964. {
  1965. bShadowAblended = TRUE;
  1966. }
  1967. if ( bDrawShadow )
  1968. g_xMainWnd.DrawWithShadowABlend(
  1969. nStartX1, nStartY1,
  1970. m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth,
  1971. m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight,
  1972. (WORD*)m_pxActorImage->m_pbCurrImage,
  1973. _CLIP_WIDTH, _CLIP_HEIGHT, g_xGameProc.m_wShadowClr, bShadowAblended, bShadowType, bOpaRate);
  1974. if ( m_wABlendDelay )
  1975. {
  1976. if ( !m_bABlendRev )
  1977. bOpaRate = 100 - ( (m_wABlendCurrDelay * 100) / m_wABlendDelay );
  1978. else
  1979. bOpaRate = ( (m_wABlendCurrDelay * 100) / m_wABlendDelay );
  1980. }
  1981. if ( bOpaRate < 0 && bOpaRate > 100 ) bOpaRate  = 0;
  1982. if ( bFocused )
  1983. {
  1984. if ( !m_bABlendRev )
  1985. bOpaRate -= 20;
  1986. else
  1987. bOpaRate += 20;
  1988. }
  1989. DrawWithEffected(m_rcActor.left, m_rcActor.top, m_pxActorImage->m_lpstNewCurrWilImageInfo->shWidth, m_pxActorImage->m_lpstNewCurrWilImageInfo->shHeight, (WORD*)m_pxActorImage->m_pbCurrImage, 
  1990.              0XFFFF, 0XFFFF, bFocused, bOpaRate, wState);
  1991. return TRUE;
  1992. }
  1993. return FALSE;
  1994. }
  1995. VOID CNPC::OnTurn(LPPACKETMSG lpPacketMsg)
  1996. {
  1997. BYTE bDir;
  1998. m_wPosX = lpPacketMsg->stDefMsg.wParam;
  1999. m_wPosY = lpPacketMsg->stDefMsg.wTag;
  2000. bDir  = LOBYTE(lpPacketMsg->stDefMsg.wSeries);
  2001. m_bLightSize = HIBYTE(lpPacketMsg->stDefMsg.wSeries);
  2002. OnCharDescPacket(lpPacketMsg);
  2003. SetMotionFrame(_MT_NPC_STAND, bDir);
  2004. }
  2005. VOID CNPC::OnHit(LPPACKETMSG lpPacketMsg)
  2006. {
  2007. BYTE bDir;
  2008. bDir = lpPacketMsg->stDefMsg.wSeries;
  2009. m_wPosX = lpPacketMsg->stDefMsg.wParam;
  2010. m_wPosY = lpPacketMsg->stDefMsg.wTag;
  2011. SetMotionFrame(_MT_NPC_ACT01, bDir);
  2012. }
  2013. /******************************************************************************************************************
  2014. 窃荐疙 : CNPC::UpdatePacketState()
  2015. 累己磊 : 
  2016. 累己老 : 
  2017. 格利   : 
  2018. 免仿   : BOOL 
  2019. [老磊][荐沥磊] : 荐沥郴侩
  2020. *******************************************************************************************************************/
  2021. BOOL CNPC::UpdatePacketState()
  2022. {
  2023. // if ( m_bCurrMtn == _MT_NPC_STAND )
  2024. {
  2025. LPPACKETMSG lpPacketMsg;
  2026. SHORT shLeftMsgCnt = m_xPacketQueue.GetCount();
  2027. if ( shLeftMsgCnt > 0 )
  2028. {
  2029. lpPacketMsg = (LPPACKETMSG)m_xPacketQueue.PopQ();
  2030. if ( shLeftMsgCnt >= 3 ) m_bMsgHurryCheck = TRUE;
  2031. else m_bMsgHurryCheck = FALSE;
  2032. if ( lpPacketMsg )
  2033. {
  2034. switch ( lpPacketMsg->stDefMsg.wIdent )
  2035. {
  2036. case SM_OPENHEALTH: { OnOpenHealth(lpPacketMsg); break; }
  2037. case SM_CLOSEHEALTH: { OnCloseHealth(lpPacketMsg); break; }
  2038. case SM_CHANGELIGHT: { OnChangeLight(lpPacketMsg); break; }
  2039. case SM_USERNAME: { OnUserName(lpPacketMsg); break; }
  2040. case SM_CHANGENAMECOLOR: { OnChangeNameClr(lpPacketMsg); break; }
  2041. case SM_HEALTHSPELLCHANGED: { OnHealthSpellChanged(lpPacketMsg); break; }
  2042. case SM_TURN: { OnTurn(lpPacketMsg); break; }
  2043. case SM_HIT: { OnHit(lpPacketMsg); break; }
  2044. default:
  2045. {
  2046. break;
  2047. }
  2048. }
  2049. }
  2050. SAFE_DELETE(lpPacketMsg);
  2051. return TRUE;
  2052. }
  2053. }
  2054. return FALSE;
  2055. }
  2056. /******************************************************************************************************************
  2057. 窃荐疙 : CNPC::UpdateMotionState()
  2058. 累己磊 : 
  2059. 累己老 : 
  2060. 格利   : 
  2061. 涝仿   : INT nLoopTime
  2062.          BOOL bIsMoveTime
  2063. 免仿   : VOID 
  2064. [老磊][荐沥磊] : 荐沥郴侩
  2065. *******************************************************************************************************************/
  2066. VOID CNPC::UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime)
  2067. {
  2068. m_wCurrDelay += nLoopTime;
  2069. if ( m_wCurrDelay > m_wDelay )
  2070. {
  2071. m_wCurrDelay = 0;
  2072. if ( m_dwCurrFrame < m_dwEndFrame ) m_dwCurrFrame++;
  2073. }
  2074. UpdatePacketState();
  2075. if ( m_dwCurrFrame >= m_dwEndFrame ) m_dwCurrFrame = m_dwFstFrame;
  2076. }
  2077. /******************************************************************************************************************
  2078. CHero Class
  2079. *******************************************************************************************************************/
  2080. /******************************************************************************************************************
  2081. 窃荐疙 : CHero::CHero()
  2082. 累己磊 : 
  2083. 累己老 : 
  2084. 格利   : 
  2085. 免仿   : 
  2086. [老磊][荐沥磊] : 荐沥郴侩
  2087. *******************************************************************************************************************/
  2088. CHero::CHero()
  2089. {
  2090. InitActor();
  2091. }
  2092. /******************************************************************************************************************
  2093. 窃荐疙 : CHero::~CHero()
  2094. 累己磊 : 
  2095. 累己老 : 
  2096. 格利   : 
  2097. 免仿   : 
  2098. [老磊][荐沥磊] : 荐沥郴侩
  2099. *******************************************************************************************************************/
  2100. CHero::~CHero()
  2101. {
  2102. DestroyActor();
  2103. }
  2104. VOID CHero::InitActor()
  2105. {
  2106. CActor::InitActor();
  2107. ZeroMemory(&m_stFeatureEx, sizeof(FEATUREEX));
  2108. m_bWeaponImgIdx = 0;
  2109. m_bHairImgIdx = 0;
  2110. m_bHorseImgIdx = 0;
  2111. m_bYedoCnt = 0;
  2112. m_bFireHitCnt = 0;
  2113. m_shHitSpeed = 0;
  2114. m_pxHairImage = NULL;
  2115. m_pxWeaponImage = NULL;
  2116. m_pxHorseImage = NULL;
  2117. m_bUseBanwol = FALSE;
  2118. m_bUseErgum = FALSE;
  2119. m_bIsMon = FALSE;
  2120. m_bShieldCurrFrm = 0;
  2121. m_wShieldCurrDelay = 0;
  2122. m_dwCurrHairFrame = 0;
  2123. m_dwCurrWeaponFrame = 0;
  2124. m_dwCurrHorseFrame = 0;
  2125. m_shCurrMagicID = 0;
  2126. ZeroMemory(&m_rcHair, sizeof(RECT));
  2127. ZeroMemory(&m_rcWeapon, sizeof(RECT));
  2128. ZeroMemory(&m_rcHorse, sizeof(RECT));
  2129. }
  2130. VOID CHero::DestroyActor()
  2131. {
  2132. CActor::DestroyActor();
  2133. InitActor();
  2134. }
  2135. /******************************************************************************************************************
  2136. 窃荐疙 : CHero::Create()
  2137. 累己磊 : 
  2138. 累己老 : 
  2139. 格利   : 
  2140. 涝仿   : CImageHandler* pxImgHandler
  2141.          WORD wActor
  2142.          BYTE bMtn
  2143.          WORD bDir
  2144.          WORD wPosX
  2145.          WORD wPosY
  2146.          FEATURE stFeature
  2147. 免仿   : BOOL 
  2148. [老磊][荐沥磊] : 荐沥郴侩
  2149. *******************************************************************************************************************/
  2150. BOOL CHero::Create(CImageHandler* pxImgHandler, BYTE bMtn, BYTE bDir, WORD wPosX, WORD wPosY, 
  2151.    FEATURE* pstFeature, FEATUREEX* pstFeatureEx)
  2152. {
  2153. if ( CActor::Create(pxImgHandler, pstFeature, bMtn, bDir, wPosX, wPosY) )
  2154. {
  2155. m_bIsMon = FALSE;
  2156. // memcpy(&m_stFeatureEx, pstFeatureEx, sizeof(FEATUREEX));
  2157. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2158. m_stFeatureEx.bHorse = 0;
  2159. m_stFeatureEx.wDressColor = 0XFF;
  2160. m_stFeatureEx.wHairColor = 0XFF;
  2161. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2162. if ( m_stFeature.bHair   >= _MAX_HAIR ) m_stFeature.bHair = _HAIR_NONE;
  2163. if ( m_stFeature.bWeapon  >= _MAX_WEAPON ) m_stFeature.bWeapon = _WEAPON_NONE;
  2164. if ( m_stFeatureEx.bHorse >= _MAX_HORSE ) m_stFeatureEx.bHorse= _HORSE_NONE;
  2165. m_bHorseImgIdx = _IMAGE_HORSE;
  2166. if ( m_stFeature.bGender == _GENDER_MAN )
  2167. {
  2168. m_bHairImgIdx = _IMAGE_M_HAIR;
  2169. if ( m_stFeature.bWeapon != _WEAPON_NONE ) m_bWeaponImgIdx = _IMAGE_M_WEAPON1+(m_stFeature.bWeapon-1)/10;
  2170. }
  2171. else if ( m_stFeature.bGender == _GENDER_WOMAN )
  2172. {
  2173. m_bHairImgIdx = _IMAGE_WM_HAIR;
  2174. if ( m_stFeature.bWeapon != _WEAPON_NONE ) m_bWeaponImgIdx = _IMAGE_WM_WEAPON1+(m_stFeature.bWeapon-1)/10;
  2175. }
  2176. else return FALSE;
  2177. if ( m_stFeature.bHair != _HAIR_NONE ) m_pxHairImage = &pxImgHandler->m_xImageList[m_bHairImgIdx];
  2178. else m_pxHairImage = NULL;
  2179. if ( m_stFeature.bWeapon != _WEAPON_NONE ) m_pxWeaponImage = &pxImgHandler->m_xImageList[m_bWeaponImgIdx];
  2180. else m_pxWeaponImage = NULL;
  2181. if ( m_stFeatureEx.bHorse != _HORSE_NONE ) m_pxHorseImage = &pxImgHandler->m_xImageList[m_bHorseImgIdx];
  2182. else m_pxHorseImage = NULL;
  2183.   
  2184. return TRUE;
  2185. }
  2186. return FALSE;
  2187. }
  2188. VOID CHero::PlayActSound()
  2189. {
  2190. INT nWaveNum = -1;
  2191. if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn == _MT_HITTED )
  2192. {
  2193. switch ( m_stHitter.bWeapon )
  2194. {
  2195. case 21: case 24: // 窜八, 厚窜八.
  2196. case 8: case 9: // 格八, 酒府荐格八.
  2197. case 18:  case 22:  case 23:  case 26:  case 27:  case 28:  case 30:  // 荤葛八. 没悼八. 枚八. 没澜八. 寒荤八. 玫飞. 邦己八.
  2198. case 1:   case 4:  case 11:  case 13:  case 14:  case 20:  case 25:  case 29:  case 31:   // 蜡岿档. 宫没措档. 腊钦档. 焙档. 档锋焊档. 荤阿档. 技梅档. 抗档. 檬去档.
  2199. nWaveNum = 70;
  2200. break;
  2201. case 5:  case 10:  case 12: // 伙利措何. 没悼档尝. 楷磊何.
  2202. case 15:  // 颇锄柳寸.
  2203. nWaveNum = 71;
  2204. break;
  2205. case 2:  case 3:  case 6:  case 7: case 16:  case 17: case 19:  // 伙瘤芒. 玫屈格. 全酒芒. 邦豹捞. 没付芒, 侩酒厘. 力付豪
  2206. nWaveNum = 72;
  2207. break;
  2208. default:
  2209. nWaveNum = 73; // 盖颊.
  2210. break;
  2211. }
  2212. if ( m_stFeature.bDress == 3 ) // 固癌林.
  2213. nWaveNum += 10;
  2214. }
  2215. else if ( m_dwCurrFrame == m_dwFstFrame+2 && m_bCurrMtn == _MT_HITTED )
  2216. {
  2217. if ( m_stFeature.bGender == _GENDER_MAN ) nWaveNum = 138;
  2218. else nWaveNum = 139;
  2219. }
  2220. else if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn == _MT_DIE )
  2221. {
  2222. if ( m_stFeature.bGender == _GENDER_MAN ) nWaveNum = 144;
  2223. else nWaveNum = 145;
  2224. }
  2225. else if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn >= _MT_ONEVSWING && m_bCurrMtn <= _MT_SPEARHSWING )
  2226. {
  2227. if ( m_bFireHitCnt == 2 )
  2228. {
  2229. nWaveNum = 137;
  2230. }
  2231. else if ( m_bYedoCnt == 2 )
  2232. {
  2233. /* if ( m_stFeature.bGender == _GENDER_MAN )
  2234. {
  2235. g_xSound.PlayActorWav(m_wPosX, m_wPosY, g_xGameProc.m_xMyHero.m_wPosX, g_xGameProc.m_xMyHero.m_wPosY, 130);
  2236. }
  2237. else
  2238. {
  2239. g_xSound.PlayActorWav(m_wPosX, m_wPosY, g_xGameProc.m_xMyHero.m_wPosX, g_xGameProc.m_xMyHero.m_wPosY, 131);
  2240. }
  2241. */ m_bYedoCnt = 0;
  2242. }
  2243. else if ( m_bUseBanwol )
  2244. {
  2245. nWaveNum = 133;
  2246. }
  2247. else if ( m_bUseErgum )
  2248. {
  2249. nWaveNum = 132;
  2250. }
  2251. }
  2252. else if ( m_dwCurrFrame == m_dwFstFrame+2 && m_bCurrMtn >= _MT_ONEVSWING && m_bCurrMtn <= _MT_SPEARHSWING )
  2253. {
  2254. switch ( m_stFeature.bWeapon )
  2255. {
  2256. case 21: case 24: // 窜八, 厚窜八.
  2257. nWaveNum = 50;
  2258. break;
  2259. case 8: case 9: // 格八, 酒府荐格八.
  2260. nWaveNum = 51;
  2261. break;
  2262. case 18:  case 22:  case 23:  case 26:  case 27:  case 28:  case 30:  // 荤葛八. 没悼八. 枚八. 没澜八. 寒荤八. 玫飞. 邦己八.
  2263. nWaveNum = 52;
  2264. break;
  2265. case 1:   case 4:  case 11:  case 13:  case 14:  case 20:  case 25:  case 29:  case 31:   // 蜡岿档. 宫没措档. 腊钦档. 焙档. 档锋焊档. 荤阿档. 技梅档. 抗档. 檬去档.
  2266. nWaveNum = 53;
  2267. break;
  2268. case 5:  case 10:  case 12: // 伙利措何. 没悼档尝. 楷磊何.
  2269. nWaveNum = 54;
  2270. break;
  2271. case 15:  // 颇锄柳寸.
  2272. nWaveNum = 55;
  2273. break;
  2274. case 2:  case 3:  case 6:  case 7: case 16:  case 17: case 19:  // 伙瘤芒. 玫屈格. 全酒芒. 邦豹捞. 没付芒, 侩酒厘. 力付豪
  2275. nWaveNum = 56;
  2276. break;
  2277. default:
  2278. nWaveNum = 57; // 盖颊.
  2279. break;
  2280. }
  2281. }
  2282. else if ( m_dwCurrFrame == m_dwFstFrame+1 && (m_bCurrMtn == _MT_SPELL1 || m_bCurrMtn == _MT_SPELL2) )
  2283. {
  2284. const INT nMagicSndTbl[31] = 
  2285. {
  2286.  0,  6,  8, 14, 15,  9,  0, 20, 21, 32,
  2287.  1,  2, 16, 29, 24, 10, 17, 33, 19, 31,
  2288. 28, 22, 13, 21,  5,  0, 12, 11,  0, 18, 
  2289. 30,
  2290. };
  2291. if ( m_shCurrMagicID < 31 )
  2292. {
  2293. nWaveNum = nMagicSndTbl[m_shCurrMagicID]*10 + 10000;
  2294. }
  2295. if ( nWaveNum < 10010 )
  2296. nWaveNum = -1;
  2297. }
  2298. /* if ( nWaveNum != -1 )
  2299. g_xSound.PlayActorWav(m_wPosX, m_wPosY, g_xGameProc.m_xMyHero.m_wPosX, g_xGameProc.m_xMyHero.m_wPosY, nWaveNum);
  2300. */}
  2301. VOID CHero::PlayMoveSound()
  2302. {
  2303. if ( m_bCurrMtn == _MT_WALK || m_bCurrMtn == _MT_RUN || m_bCurrMtn == _MT_HORSEWALK || m_bCurrMtn == _MT_HORSERUN || m_bCurrMtn == _MT_MOODEPO || m_bCurrMtn == _MT_PUSHBACK )
  2304. {
  2305. /* if ( m_dwCurrFrame == m_dwEndFrame-5 || m_bBackStepFrame == m_dwEndFrame-5 )
  2306. g_xSound.PlayActorWav(m_wPosX, m_wPosY, g_xGameProc.m_xMyHero.m_wPosX, g_xGameProc.m_xMyHero.m_wPosY, 1,100);
  2307. if ( m_dwCurrFrame == m_dwEndFrame-2 || m_bBackStepFrame == m_bBackStepFrameCnt-2 )
  2308. g_xSound.PlayActorWav(m_wPosX, m_wPosY, g_xGameProc.m_xMyHero.m_wPosX, g_xGameProc.m_xMyHero.m_wPosY, 1,100);
  2309. */ }
  2310. }
  2311. VOID CHero::ShowShield()
  2312. {
  2313. if ( m_nState & 0X100000 )
  2314. {
  2315. WORD wShieldFrm;
  2316. if ( m_bCurrMtn == _MT_HITTED ) wShieldFrm = m_bShieldCurrFrm + 853;
  2317. else wShieldFrm = m_bShieldCurrFrm + 850;
  2318. if ( g_xMainWnd.Get3DDevice() )
  2319. {
  2320. if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()) )
  2321. {
  2322. D3DVECTOR vTrans;
  2323. D3DMATRIX matTrans;
  2324. D3DMATRIX matScale;
  2325. D3DMATRIX matRot;
  2326. D3DMATRIX matWorld;
  2327. D3DMATRIX matWorldOriginal;
  2328. g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
  2329. D3DMATERIAL7 mtrl;
  2330. CWHWilImageData* pxWilImg;
  2331. pxWilImg = &g_xGameProc.m_xImage.m_xImageList[_IMAGE_MAGIC];
  2332. if ( pxWilImg->NewSetIndex(wShieldFrm) )
  2333. {
  2334. // if ( !D3DWILTextr_GetSurface(pxWilImg->m_szWilFileName, wShieldFrm) )
  2335. // D3DWILTextr_Restore(pxWilImg->m_szWilFileName, wShieldFrm, g_xMainWnd.Get3DDevice());
  2336.   vTrans.x = (FLOAT)m_shScrnPosX+(FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shWidth/2+pxWilImg->m_lpstNewCurrWilImageInfo->shPX-400; 
  2337. vTrans.y = (FLOAT)-m_shScrnPosY-(FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shHeight/2-pxWilImg->m_lpstNewCurrWilImageInfo->shPY+300; 
  2338. vTrans.z = 0;
  2339. D3DUtil_SetTranslateMatrix(matTrans, vTrans);
  2340. D3DUtil_SetScaleMatrix(matScale, (FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shWidth, (FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shHeight, 0.0f);
  2341. D3DMath_MatrixMultiply(matWorld, matScale, matTrans);
  2342. g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld);
  2343. // g_xMainWnd.Get3DDevice()->SetTexture(0, D3DWILTextr_GetSurface(pxWilImg->m_szWilFileName, wShieldFrm));
  2344. g_xGameProc.m_xImage.AddTextr(_TEXTR_FILE_MAGIC,_IMAGE_MAGIC, wShieldFrm);
  2345. LPDIRECTDRAWSURFACE7 lpddsTextr = g_xGameProc.m_xImage.GetTextrImg(_TEXTR_FILE_MAGIC, _IMAGE_MAGIC, wShieldFrm);
  2346. g_xMainWnd.Get3DDevice()->SetTexture(0, lpddsTextr);
  2347. D3DUtil_InitMaterial(mtrl, 
  2348.  (FLOAT)255/255.0f,
  2349.  (FLOAT)255/255.0f, 
  2350.  (FLOAT)255/255.0f);
  2351. mtrl.diffuse.a = 0/255.0f;
  2352. g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
  2353. SetBlendRenderState(g_xMainWnd.Get3DDevice(), _BLEND_LIGHTINV, mtrl);
  2354. g_xMainWnd.Get3DDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, m_avBoard, 4, NULL);
  2355. // 盔惑汗蓖.
  2356. ZeroMemory(&mtrl, sizeof(mtrl));
  2357. mtrl.diffuse.r = mtrl.diffuse.g = mtrl.diffuse.b = 0.1f;
  2358. mtrl.ambient.r = mtrl.ambient.g = mtrl.ambient.b = 1.0f;
  2359. g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
  2360. ResetBlendenderState(g_xMainWnd.Get3DDevice());
  2361. g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
  2362. }
  2363. g_xMainWnd.Get3DDevice()->EndScene();
  2364. }
  2365. }
  2366. }
  2367. }
  2368. /******************************************************************************************************************
  2369. 窃荐疙 : CHero::UpdateMove(BOOL bIsMoveTime)
  2370. 累己磊 : 
  2371. 累己老 : 
  2372. 格利   : 
  2373. 免仿   : BOOL 
  2374. [老磊][荐沥磊] : 荐沥郴侩
  2375. *******************************************************************************************************************/
  2376. BOOL CHero::UpdateMove(BOOL bIsMoveTime)
  2377. {
  2378. if ( m_bCurrMtn == _MT_WALK || m_bCurrMtn == _MT_RUN || m_bCurrMtn == _MT_HORSEWALK || m_bCurrMtn == _MT_HORSERUN || m_bCurrMtn == _MT_MOODEPO || m_bCurrMtn == _MT_PUSHBACK )
  2379. {
  2380. m_wCurrDelay = 0;
  2381. if ( bIsMoveTime )
  2382. {
  2383. if ( m_bCurrMtn == _MT_PUSHBACK )
  2384. {
  2385. m_bBackStepFrame += 2;
  2386. if ( m_bBackStepFrame >= m_bBackStepFrameCnt )
  2387. {
  2388. m_dwCurrFrame++;
  2389. m_bBackStepFrame = m_bBackStepFrameCnt;
  2390. }
  2391. }
  2392. else if ( m_bCurrMtn == _MT_MOODEPO )
  2393. {
  2394. m_dwCurrFrame+=2;
  2395. if ( m_dwCurrFrame >= m_dwEndFrame ) m_dwCurrFrame = m_dwEndFrame;
  2396. }
  2397. else
  2398. {
  2399. m_dwCurrFrame++;
  2400. PlayMoveSound();
  2401. if ( m_bMsgHurryCheck )
  2402. {
  2403. m_dwCurrFrame++;
  2404. }
  2405. }
  2406. if ( m_bCurrMtn == _MT_PUSHBACK )
  2407. {
  2408. if ( m_bBackStepFrame >= m_bBackStepFrameCnt-m_bMoveNextFrmCnt && !m_bIsMoved )
  2409. {
  2410. SetMoved();
  2411. m_bIsMoved = TRUE;
  2412. }
  2413. }
  2414. else
  2415. {
  2416. if ( m_dwCurrFrame >= m_dwEndFrame-m_bMoveNextFrmCnt && !m_bIsMoved )
  2417. {
  2418. SetMoved();
  2419. m_bIsMoved = TRUE;
  2420. }
  2421. }
  2422. }
  2423. // 楷加利牢 橇饭烙 吝俊辑 秦具且老.
  2424. if ( m_dwCurrFrame >= m_dwEndFrame )
  2425. {
  2426. m_dwCurrFrame = m_dwEndFrame - 1;
  2427. m_shShiftTileX = 0;
  2428. m_shShiftTileY = 0;
  2429. m_shShiftPixelX = 0;
  2430. m_shShiftPixelY = 0;
  2431. m_dwCurrEffectFrame = 0;
  2432. m_dwFstEffectFrame = 0;
  2433. m_dwEndEffectFrame = 0;
  2434. m_bEffectFrame = 0;
  2435. m_bEffectFrameCnt = _DEFAULT_SPELLFRAME;
  2436. m_bUseEffect = FALSE;
  2437. m_bUseSwordEffect = FALSE;
  2438. m_dwCurrFrame = m_dwFstFrame;
  2439. m_bBackStepFrame = 0;
  2440. m_bBackStepFrameCnt = 0;
  2441. m_bIsMoved = FALSE;
  2442. if ( m_stFeatureEx.bHorse == _HORSE_NONE )
  2443. {
  2444. if ( m_bWarMode )
  2445. SetMotionFrame(_MT_ATTACKMODE, m_bCurrDir);
  2446. else
  2447. SetMotionFrame(_MT_STAND, m_bCurrDir);
  2448. }
  2449. else
  2450. {
  2451. SetMotionFrame(_MT_HORSESTAND, m_bCurrDir);
  2452. }
  2453. }
  2454. else if ( m_dwCurrFrame < m_dwEndFrame )
  2455. {
  2456. if ( m_bCurrMtn != _MT_PUSHBACK )
  2457. SetMoving();
  2458. else
  2459. SetBackStepMoving();
  2460. }
  2461. return TRUE;
  2462. }
  2463. return FALSE;
  2464. }
  2465. VOID CHero::OnCharDescPacket(LPPACKETMSG lpPacketMsg)
  2466. {
  2467. CHARDESC stCharDesc;
  2468. FEATURE stFeature;
  2469. fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stCharDesc, sizeof(CHARDESC));
  2470. memcpy(&stFeature, &stCharDesc.nFeature, sizeof(FEATURE));
  2471. m_nState = stCharDesc.nStatus;
  2472. if( m_nState & 0X2 ) m_bOpenHealth = TRUE;
  2473. else m_bOpenHealth = FALSE;
  2474. ChangeFeature(stFeature, m_stFeatureEx);
  2475. }
  2476. VOID CHero::OnFeatureChanged(LPPACKETMSG lpPacketMsg)
  2477. {
  2478. FEATURE stFeature;
  2479. LONG nFeature   = MAKELONG(lpPacketMsg->stDefMsg.wParam, lpPacketMsg->stDefMsg.wTag);
  2480. memcpy(&stFeature, &nFeature, sizeof(LONG));
  2481. ChangeFeature(stFeature, m_stFeatureEx);
  2482. }
  2483. VOID CHero::OnCharStatusChanged(LPPACKETMSG lpPacketMsg)
  2484. {
  2485. m_shHitSpeed = lpPacketMsg->stDefMsg.wSeries;
  2486. m_nState = MAKELONG(lpPacketMsg->stDefMsg.wParam, lpPacketMsg->stDefMsg.wTag);
  2487. if( m_nState & 0X2 ) m_bOpenHealth = TRUE;
  2488. else m_bOpenHealth = FALSE;
  2489. }
  2490. VOID CHero::OnRush(LPPACKETMSG lpPacketMsg)
  2491. {
  2492. BYTE bDir = lpPacketMsg->stDefMsg.wSeries;
  2493. m_wPosX   = lpPacketMsg->stDefMsg.wParam;
  2494. m_wPosY   = lpPacketMsg->stDefMsg.wTag;
  2495. SetMotionFrame(_MT_MOODEPO, bDir);
  2496. m_bMoveSpeed = _SPEED_WALK;
  2497. SetMoving();
  2498. }
  2499. VOID CHero::OnBackStep(LPPACKETMSG lpPacketMsg)
  2500. {
  2501. BYTE bDir = lpPacketMsg->stDefMsg.wSeries;
  2502. m_wPosX   = lpPacketMsg->stDefMsg.wParam;
  2503. m_wPosY   = lpPacketMsg->stDefMsg.wTag;
  2504. SetMotionFrame(_MT_PUSHBACK, bDir);
  2505. if ( m_bCurrDir < 4 ) m_bMoveDir = m_bCurrDir + 4;
  2506. else m_bMoveDir = m_bCurrDir - 4;
  2507. m_bBackStepFrame = 0;
  2508. m_bBackStepFrameCnt = 6;
  2509. m_bMoveSpeed = _SPEED_WALK;
  2510. SetBackStepMoving();
  2511. }
  2512. VOID CHero::OnDeath(LPPACKETMSG lpPacketMsg)
  2513. {
  2514. BYTE bDir;
  2515. m_wPosX = lpPacketMsg->stDefMsg.wParam;
  2516. m_wPosY = lpPacketMsg->stDefMsg.wTag;
  2517. bDir = lpPacketMsg->stDefMsg.wSeries;
  2518. OnCharDescPacket(lpPacketMsg);
  2519. SetMotionFrame(_MT_DIE, bDir);
  2520. if ( lpPacketMsg->stDefMsg.wIdent == SM_DEATH )
  2521. {
  2522. m_dwCurrFrame = m_dwEndFrame - 1;
  2523. m_bIsDead = TRUE;
  2524. }
  2525. }
  2526. VOID CHero::OnWalk(LPPACKETMSG lpPacketMsg)
  2527. {
  2528. BYTE bDir;
  2529. CHARDESC stCharDesc;
  2530. FEATURE stFeature;
  2531. // FEATUREEX stFeatureEx;
  2532. // m_wPosX = lpPacketMsg->stDefMsg.wParam;
  2533. // m_wPosY = lpPacketMsg->stDefMsg.wTag;
  2534. bDir  = LOBYTE(lpPacketMsg->stDefMsg.wSeries);
  2535. m_bLightSize = HIBYTE(lpPacketMsg->stDefMsg.wSeries);
  2536. fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stCharDesc, sizeof(CHARDESC));