⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 actor.cpp

📁 传奇2客户端源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	if ( /*stFeature.bGender >= 0 && stFeature.bGender < _MAX_GENDER && */CheckFeatureValidate(stFeature) )
	{
		switch ( stFeature.bGender )
		{
		case _GENDER_MAN:
			{
				if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_HERO_KIND )
					return FALSE;
				else	
				{
					m_bActorImgIdx = _IMAGE_M_HUMAN;
					m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wFstFrm + stFeature.bDress*_MAX_HERO_FRAME + m_bCurrDir*10;
					m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wFrmCnt;
					m_wDelay = g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wDelay;



//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					stFeature.bHair = 2;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



				}
			}
			break;
		case _GENDER_WOMAN:
			{
				if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_HERO_KIND )
					return FALSE;
				else
				{
					m_bActorImgIdx = _IMAGE_WM_HUMAN;
					m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wFstFrm + stFeature.bDress*_MAX_HERO_FRAME + m_bCurrDir*10;
					m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wFrmCnt;
					m_wDelay = g_xSpriteInfo.m_stHeroSpr[m_bCurrMtn].wDelay;


//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					stFeature.bHair = 2;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



				}
			}
			break;
		case _GENDER_MON:
			{
				if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_MON_KIND )
					return FALSE;
				else
				{
					g_xSpriteInfo.SetMonFrameInfo(stFeature.bDress);
					m_bActorImgIdx = _IMAGE_MONSTER1 + (stFeature.bDress/10);
					m_dwFstFrame = g_xSpriteInfo.m_stMonSpr[m_bCurrMtn].wFstFrm + (stFeature.bDress%10)*_MAX_MON_FRAME + m_bCurrDir*10;
					m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stMonSpr[m_bCurrMtn].wFrmCnt;
					m_wDelay = g_xSpriteInfo.m_stMonSpr[m_bCurrMtn].wDelay;
				}
			}
			break;
		// NPC绰 橇饭烙捞 老沥窍瘤 臼栏骨肺 蝶肺 利侩矫挪促.
		case _GENDER_NPC:
		default:
			return FALSE;
		}
		m_stFeature		= stFeature;
		m_pxActorImage	= &(pxImgHandler->m_xImageList[m_bActorImgIdx]);
		m_dwCurrFrame	= m_dwFstFrame;

		return TRUE;
	}
	
	return FALSE;
}


/******************************************************************************************************************

	窃荐疙 : CActor::SetMotionFrame()

	累己磊 : 
	累己老 : 

	格利   : 
	涝仿   : BYTE bMtn
	         BYTE bDir
	免仿   : BOOL 

	[老磊][荐沥磊] : 荐沥郴侩

*******************************************************************************************************************/
BOOL CActor::SetMotionFrame(BYTE bMtn, BYTE bDir)
{
	if ( /*(bMtn < 0 && bMtn >= _MAX_HERO_MTN) || */(bDir < 0 && bDir >= _MAX_DIRECTION) )
		return FALSE;

	switch ( m_stFeature.bGender )
	{
	case _GENDER_MAN:
		{
			m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[bMtn].wFstFrm + m_stFeature.bDress*_MAX_HERO_FRAME + bDir*10;
			m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[bMtn].wFrmCnt;
			m_wDelay = g_xSpriteInfo.m_stHeroSpr[bMtn].wDelay;
		}
		break;
	case _GENDER_WOMAN:
		{
			m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[bMtn].wFstFrm + m_stFeature.bDress*_MAX_HERO_FRAME + bDir*10;
			m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[bMtn].wFrmCnt;
			m_wDelay = g_xSpriteInfo.m_stHeroSpr[bMtn].wDelay;
		}
		break;
	case _GENDER_MON:
		{
			if ( m_stFeature.bDress == 31 && bMtn == _MT_MON_STAND )
				bDir = 0;

		switch ( m_stFeature.bDress )
		{
		case 31:	// 侥牢檬.
		case 67:	// 盟锋脚.
		case 73:	// 厚阜盔面.
		case 104:	// 利岿付.
			bDir = 0;
		case 106:	// 气救芭固.
			bDir = 1;
			break;
		default:
			break;
		}

			g_xSpriteInfo.SetMonFrameInfo(m_stFeature.bDress);
			m_dwFstFrame = g_xSpriteInfo.m_stMonSpr[bMtn].wFstFrm + (m_stFeature.bDress%10)*_MAX_MON_FRAME + bDir*10;
			m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stMonSpr[bMtn].wFrmCnt;
			m_wDelay = g_xSpriteInfo.m_stMonSpr[bMtn].wDelay;
		}
		break;
	case _GENDER_NPC:
		{
			bDir++;		// bDir篮 0捞 瞪荐档 乐扁锭巩捞促.
			bDir = bDir/3;
			m_dwFstFrame = g_xSpriteInfo.m_stNPCSpr[bMtn].wFstFrm + m_stFeature.bDress*_MAX_NPC_FRAME + bDir*10;
			m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stNPCSpr[bMtn].wFrmCnt;
			m_wDelay = g_xSpriteInfo.m_stNPCSpr[bMtn].wDelay;
		}
		break;
	default:
		return FALSE;
	}

	m_bCurrMtn		= bMtn;
	m_bCurrDir		= bDir;
	m_bMoveDir		= bDir;
	m_dwCurrFrame	= m_dwFstFrame;
	m_wCurrDelay	= 0;

	if ( m_bCurrDir == _DIRECTION_LIST_8 )
		m_bMoveNextFrmCnt = 2;
	else
		m_bMoveNextFrmCnt = 5;


	return TRUE;
}


VOID CActor::PlayActSound()
{
	INT nWaveNum = -1;

	const INT nActorSndTbl[100] = 
	{
		 -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,	//  0 -  9
		 -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,	// 10 - 19
		160, 161, 100, 101, 102, 163,   0, 162,  83,  80,	// 20 - 29
		  1,  10,  20,  21,  22,  23, 150,  24,  25,  26,	// 30 - 39
		 27,  30,  32,  31, 151,  34,  28,  18,  40,  50,	// 40 - 49
		 51,  52,  53, 152,  36,  72,  37,  38,  43,  44,	// 50 - 59
		 45,  48,  49,  90,  91,  70,  73, 140,  74, 120,	// 60 - 69
		121,  81,  82,  41,  42,  39, 110, 111, 112, 130,	// 70 - 79
		164,  46,  47,  61,  62,  63,  71,  -1,  -1, 170,	// 80 - 89
		171,  33,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,	// 90 - 99
	};

	if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn == _MT_MON_APPEAR )			// 唱鸥唱扁.
	{
		nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10;
	}
	else if ( (m_dwCurrFrame == m_dwFstFrame+1) && (m_bCurrMtn == _MT_MON_STAND || _MT_MON_WALK) )		// 肛苗乐扁.
	{
		INT nRand = rand();

		if ( m_bFstSoundPlayed && !m_bIsDead )
		{
			if ( !(nRand%25) )
				nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 1;
			else
				nWaveNum = -1;
		}
		else
		{
			if ( !(nRand%3) && !m_bIsDead )
			{
				nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 1;
				m_bFstSoundPlayed = TRUE;
			}
			else
				nWaveNum = -1;
		}
	}
	else if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn == _MT_MON_ATTACK_A )	// 老馆傍拜1.
	{
		nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 2;
	}
	else if ( m_dwCurrFrame == m_dwFstFrame+2 && m_bCurrMtn == _MT_MON_ATTACK_A )	// 老馆傍拜1.
	{
		nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 3;
	}
	else if ( m_dwCurrFrame == m_dwFstFrame+1 && m_bCurrMtn == _MT_MON_HITTED )
	{
		if ( m_stFeature.bGender < 2 )
		{
			switch ( m_stHitter.bWeapon )
			{
				case 21: case 24: // 窜八, 厚窜八.
				case 8: case 9: // 格八, 酒府荐格八.
				case 18:  case 22:  case 23:  case 26:  case 27:  case 28:  case 30:  // 荤葛八. 没悼八. 枚八. 没澜八. 寒荤八. 玫飞. 邦己八.
				case 1:   case 4:  case 11:  case 13:  case 14:  case 20:  case 25:  case 29:  case 31:   // 蜡岿档. 宫没措档. 腊钦档. 焙档. 档锋焊档. 荤阿档. 技梅档. 抗档. 檬去档.
					nWaveNum = 70;
					break;
				case 5:  case 10:  case 12: // 伙利措何. 没悼档尝. 楷磊何.
				case 15:  // 颇锄柳寸.
					nWaveNum = 71;
					break;
				case 2:  case 3:  case 6:  case 7: case 16:  case 17: case 19:  // 伙瘤芒. 玫屈格. 全酒芒. 邦豹捞. 没付芒, 侩酒厘. 力付豪
					nWaveNum = 72;
					break;
				default:
					nWaveNum = 73;	// 盖颊.
					break;
			}
		}
	}
	else if ( m_dwCurrFrame == m_dwFstFrame+2 && m_bCurrMtn == _MT_MON_HITTED )		// 嘎扁.
	{
		nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 4;
	}
	else if ( m_dwCurrFrame == m_dwFstFrame+2 && m_bCurrMtn == _MT_MON_DIE )		// 磷扁1.
	{
		nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 5;
	}
	else if ( m_dwCurrFrame == m_dwFstFrame+3 && m_bCurrMtn == _MT_MON_DIE )		// 磷扁2.
	{
		nWaveNum = 200 + nActorSndTbl[m_stFeature.bDress]*10 + 6;
	}

/*	if ( nWaveNum != -1 )
		g_xSound.PlayActorWav(m_wPosX, m_wPosY, g_xGameProc.m_xMyHero.m_wPosX, g_xGameProc.m_xMyHero.m_wPosY, nWaveNum);
*/
}



/******************************************************************************************************************

	窃荐疙 : CActor::SetMoving()

	累己磊 : 
	累己老 : 

	格利   : 
	免仿   : VOID 

	[老磊][荐沥磊] : 荐沥郴侩

*******************************************************************************************************************/
VOID CActor::SetMoving()
{	
	WORD wFrmCnt  = m_dwEndFrame  - m_dwFstFrame;
	WORD wCurrFrm = m_dwCurrFrame - m_dwFstFrame;

	switch ( m_bMoveDir )
	{
	case _DIRECTION_LIST_1:
		m_shShiftPixelX =  0;

		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_2:
		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;

		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_3:
		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;

		m_shShiftPixelY = 0;
		break;
	case _DIRECTION_LIST_4:
		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;

		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_5:
		m_shShiftPixelX =  0;

		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_6:
		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;

		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_7:
		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;

		m_shShiftPixelY =  0;
		break;
	case _DIRECTION_LIST_8:
		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX = -(_CELL_WIDTH /wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX =  (_CELL_WIDTH /wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;

		if ( wCurrFrm < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY = -(_CELL_HEIGHT/wFrmCnt * (wCurrFrm+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY =  (_CELL_HEIGHT/wFrmCnt * (wFrmCnt - wCurrFrm -1))*m_bMoveSpeed;
		break;	
	}
}



/******************************************************************************************************************

	窃荐疙 : CActor::SetBackStepMoving()

	累己磊 : 
	累己老 : 

	格利   : 
	免仿   : VOID 

	[老磊][荐沥磊] : 荐沥郴侩

*******************************************************************************************************************/
VOID CActor::SetBackStepMoving()
{	
	switch ( m_bMoveDir )
	{
	case _DIRECTION_LIST_1:
		m_shShiftPixelX =  0;

		if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_2:
		if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;

		if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_3:
		if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;

		m_shShiftPixelY = 0;
		break;
	case _DIRECTION_LIST_4:
		if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX =  (_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
		else
			m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;

		if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_5:
		m_shShiftPixelX =  0;

		if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelY =  (_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;
		else
			m_shShiftPixelY = -(_CELL_HEIGHT/m_bBackStepFrameCnt * (m_bBackStepFrameCnt - m_bBackStepFrame -1))*m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_6:
		if ( m_bBackStepFrame < (6-m_bMoveNextFrmCnt) )
			m_shShiftPixelX = -(_CELL_WIDTH /m_bBackStepFrameCnt * (m_bBackStepFrame+1))*m_bMoveSpeed;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -