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

📄 actor.cpp

📁 传奇2客户端源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		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_7:
		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_8:
		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;	
	}
}


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

	窃荐疙 : CActor::SetMoved()

	累己磊 : 
	累己老 : 

	格利   : 
	免仿   : VOID 

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

*******************************************************************************************************************/
VOID CActor::SetMoved()
{
	switch ( m_bMoveDir )
	{
	case _DIRECTION_LIST_1:
		m_shShiftTileX =  0;
		m_shShiftTileY = -m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_2:
		m_shShiftTileX =  m_bMoveSpeed;
		m_shShiftTileY = -m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_3:
		m_shShiftTileX =  m_bMoveSpeed;
		m_shShiftTileY =  0;
		break;
	case _DIRECTION_LIST_4:
		m_shShiftTileX =  m_bMoveSpeed;
		m_shShiftTileY =  m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_5:
		m_shShiftTileX =  0;
		m_shShiftTileY =  m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_6:
		m_shShiftTileX = -m_bMoveSpeed;
		m_shShiftTileY =  m_bMoveSpeed;
		break;
	case _DIRECTION_LIST_7:
		m_shShiftTileX = -m_bMoveSpeed;
		m_shShiftTileY =  0;
		break;
	case _DIRECTION_LIST_8:
		m_shShiftTileX = -m_bMoveSpeed;
		m_shShiftTileY = -m_bMoveSpeed;
		break;
	}
	m_wPosX += m_shShiftTileX;
	m_wPosY += m_shShiftTileY;
	m_shShiftPixelX = 0;
	m_shShiftPixelY = 0;
}


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

	窃荐疙 : CActor::OnCharDescPacket()

	累己磊 : 
	累己老 : 

	格利   : SM_WALK, SM_DEATH, SM_TURN, SM_RUN, SM_DIGUP 皋矫瘤俊 荤侩茄促.
	涝仿   : LPPACKETMSG lpPacketMsg
	免仿   : VOID 

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

*******************************************************************************************************************/
VOID CActor::OnCharDescPacket(LPPACKETMSG lpPacketMsg)
{
	CHARDESC	stCharDesc;
	FEATURE		stFeature;
	fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stCharDesc, sizeof(CHARDESC));

	memcpy(&stFeature, &stCharDesc.nFeature, sizeof(FEATURE));
	m_nState = stCharDesc.nStatus;

	if( m_nState & 0X2 )	m_bOpenHealth = TRUE;
	else					m_bOpenHealth = FALSE;

	ChangeFeature(stFeature);
}

VOID CActor::OnUserName(LPPACKETMSG lpPacketMsg)
{
	INT nPos = fnDecode6BitBuf(lpPacketMsg->szEncodeData, m_szName, sizeof(m_szName));
	m_szName[nPos] = '\0';

	m_dwNameClr = GetUserNameColor(lpPacketMsg->stDefMsg.wParam);
}

VOID CActor::OnChangeNameClr(LPPACKETMSG lpPacketMsg)
{
	m_dwNameClr = GetUserNameColor(lpPacketMsg->stDefMsg.wParam);
}

VOID CActor::OnChangeLight(LPPACKETMSG lpPacketMsg)
{
	m_bLightSize = lpPacketMsg->stDefMsg.wParam;
}

VOID CActor::OnOpenHealth(LPPACKETMSG lpPacketMsg)
{
	m_bOpenHealth = TRUE;
}

VOID CActor::OnCloseHealth(LPPACKETMSG lpPacketMsg)
{
	m_bOpenHealth = FALSE;
}

VOID CActor::OnFeatureChanged(LPPACKETMSG lpPacketMsg)
{
	FEATURE stFeature;
	LONG nFeature	  = MAKELONG(lpPacketMsg->stDefMsg.wParam, lpPacketMsg->stDefMsg.wTag);

	memcpy(&stFeature, &nFeature, sizeof(LONG));

	ChangeFeature(stFeature);
}

VOID CActor::OnHealthSpellChanged(LPPACKETMSG lpPacketMsg)
{
	m_wHP	 = lpPacketMsg->stDefMsg.wParam;
	m_wMP	 = lpPacketMsg->stDefMsg.wTag;
	m_wMAXHP = lpPacketMsg->stDefMsg.wSeries;
	FLOAT wHPRate = (FLOAT)((FLOAT)m_wHP/(FLOAT)m_wMAXHP);
	m_bHPPercent  = wHPRate*100;
}

VOID CActor::OnWalk(LPPACKETMSG lpPacketMsg)
{
	BYTE bDir;
//	m_wPosX = lpPacketMsg->stDefMsg.wParam;
//	m_wPosY = lpPacketMsg->stDefMsg.wTag;
	bDir		 = LOBYTE(lpPacketMsg->stDefMsg.wSeries);
	m_bLightSize = HIBYTE(lpPacketMsg->stDefMsg.wSeries);
	OnCharDescPacket(lpPacketMsg);
	SetMotionFrame(_MT_MON_WALK, bDir);
	m_bMoveSpeed = _SPEED_WALK;
	SetMoving();
}

VOID CActor::OnTurn(LPPACKETMSG lpPacketMsg)
{
	BYTE bDir;
	m_wPosX = lpPacketMsg->stDefMsg.wParam;
	m_wPosY = lpPacketMsg->stDefMsg.wTag;
	bDir		 = LOBYTE(lpPacketMsg->stDefMsg.wSeries);
	m_bLightSize = HIBYTE(lpPacketMsg->stDefMsg.wSeries);

	// 侥牢檬.
	if ( m_stFeature.bDress == 31 )
		bDir = 0;

	OnCharDescPacket(lpPacketMsg);

	SetMotionFrame(_MT_MON_STAND, bDir);

	if( m_nState & 0X1 )		// 籍拳惑怕.
	{
		switch ( m_stFeature.bDress )
		{
		case 83: //林付脚厘.
		case 84: //林付龋过.
		case 85: //林付空.
			SetMotionFrame(_MT_MON_APPEAR, 0);
			m_dwEndFrame = m_dwFstFrame + 1;
			m_bCurrMtn = _MT_MON_STAND;
		}
	}
}

VOID CActor::OnDigup(LPPACKETMSG lpPacketMsg)
{
	//MESSAGEBODYWL ????????
	BYTE bDir;
	m_wPosX      = lpPacketMsg->stDefMsg.wParam;
	m_wPosY		 = lpPacketMsg->stDefMsg.wTag;
	bDir		 = LOBYTE(lpPacketMsg->stDefMsg.wSeries);
	m_bLightSize = HIBYTE(lpPacketMsg->stDefMsg.wSeries);
	OnCharDescPacket(lpPacketMsg);
	m_bReverse = FALSE;

	switch ( m_stFeature.bDress )
	{
	case 3: 
		m_bReverse = TRUE;
		break;
	case 85: //林付空.
		bDir = 0;
		break;
	case 31: //侥牢檬.		
		bDir = 0;
		m_bReverse = TRUE;
		break;
	case 56:
		{
			CMagic* pxMagic;
			pxMagic = new CMagic;
			pxMagic->CreateMagic(_SKILL_SKELLETON, m_wPosX, m_wPosY, m_wPosX, m_wPosY, NULL, 0);
			g_xGameProc.m_xMagicList.AddNode(pxMagic);	
			break;
		}
/*	case 89:
		{
			CMagic* pxMagic;
			pxMagic = new CMagic;
			pxMagic->CreateMagic(_SKILL_SINSU, m_wPosX, m_wPosY, m_wPosX, m_wPosY, NULL, 0);
			g_xGameProc.m_xMagicList.AddNode(pxMagic);	
			break;
		}
*/	}

	m_bAppearState = _DIG_UP;
	SetMotionFrame(_MT_MON_APPEAR, bDir);
}

VOID CActor::OnDigDown(LPPACKETMSG lpPacketMsg)
{
	BYTE bDir;
	m_wPosX		 = lpPacketMsg->stDefMsg.wParam;
	m_wPosY		 = lpPacketMsg->stDefMsg.wTag;
	bDir		 = m_bCurrDir;
	m_bReverse	 = TRUE;

	switch ( m_stFeature.bDress )
	{
	case 3: 
		m_bReverse = FALSE;
		break;
	case 31: //侥牢檬.		
		bDir = 0;
		m_bReverse = FALSE;
		break;
	}

	m_bAppearState = _DIG_DOWN;

	SetMotionFrame(_MT_MON_APPEAR, bDir);
}

VOID CActor::OnDeath(LPPACKETMSG lpPacketMsg)
{
	BYTE bDir;
	m_wPosX = lpPacketMsg->stDefMsg.wParam;
	m_wPosY = lpPacketMsg->stDefMsg.wTag;
	bDir	= lpPacketMsg->stDefMsg.wSeries;
	OnCharDescPacket(lpPacketMsg);
	SetMotionFrame(_MT_MON_DIE, bDir);
	if ( lpPacketMsg->stDefMsg.wIdent == SM_DEATH )			
	{
		m_dwCurrFrame = m_dwEndFrame - 1;
		m_bIsDead = TRUE;
	}
	else 
	{
		// 阁胶磐老锭.
		if ( m_stFeature.bGender == _GENDER_MON )
		{
			CMagic* pxMagic;
			switch ( m_stFeature.bDress )
			{
			case 4:		// 籍厘牢.
				pxMagic = new CMagic;
				pxMagic->CreateMagic(_MONMAGIC_EXPLODE1, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
				g_xGameProc.m_xMagicList.AddNode(pxMagic);
				break;
			case  5:		// 官捻啊福唱.
			case  6:		// 官磊匡.
			case 11:		// 葛叼怜.
			case 19:		// 饭叼啊福唱.
				pxMagic = new CMagic;
				pxMagic->CreateMagic(_MONMAGIC_SINGI_DIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
				g_xGameProc.m_xMagicList.AddNode(pxMagic);
/*				LoadEffect(&g_xGameProc.m_xImage, _MONMAGIC_DIE);
				m_bUseSwordEffect = TRUE;
*/				break;
			case 40:		// 倾荐酒厚.
				pxMagic = new CMagic;
				pxMagic->CreateMagic(_MONMAGIC_HUSU_DIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
				g_xGameProc.m_xMagicList.AddNode(pxMagic);
/*				LoadEffect(&g_xGameProc.m_xImage, _MONMAGIC_HUSU_DIE);
				m_bUseSwordEffect = TRUE;
*/				break;
			case 48:		// 粱厚.
				pxMagic = new CMagic;
				pxMagic->CreateMagic(_MONMAGIC_ZOMBIE_DIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
				g_xGameProc.m_xMagicList.AddNode(pxMagic);
/*				LoadEffect(&g_xGameProc.m_xImage, _MONMAGIC_ZOMBIE_DIE);
				m_bUseSwordEffect = TRUE;
*/				break;
			case 99:		// 官坷崔靛.
				pxMagic = new CMagic;
				pxMagic->CreateMagic(_MONMAGIC_BAODIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
				g_xGameProc.m_xMagicList.AddNode(pxMagic);
				break;
			default :
				break;
			}
		}
	}	
}

VOID CActor::OnBackStep(LPPACKETMSG lpPacketMsg)
{
	BYTE bDir;
	bDir	= lpPacketMsg->stDefMsg.wSeries;
	m_wPosX = lpPacketMsg->stDefMsg.wParam;
	m_wPosY = lpPacketMsg->stDefMsg.wTag;
	SetMotionFrame(_MT_MON_WALK, bDir);
	if ( m_bCurrDir < 4 )			m_bMoveDir = m_bCurrDir + 4;
	else							m_bMoveDir = m_bCurrDir - 4;
	m_bMoveSpeed = _SPEED_WALK;
	m_bBackStepFrame	= 0;
	m_bBackStepFrameCnt = 6;
	SetBackStepMoving();
}

VOID CActor::OnStruck(LPPACKETMSG lpPacketMsg)
{
	MESSAGEBODYWL stMsgBodyWl;
	FEATURE		  stFeature;

	FLOAT wHPRate = (FLOAT)((FLOAT)lpPacketMsg->stDefMsg.wParam/(FLOAT)lpPacketMsg->stDefMsg.wTag);
	WORD  wDamage = lpPacketMsg->stDefMsg.wSeries;
	m_wHP		  = lpPacketMsg->stDefMsg.wParam;
	m_wMAXHP	  = lpPacketMsg->stDefMsg.wTag;
	m_bHPPercent  = wHPRate*100;

	fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stMsgBodyWl, sizeof(MESSAGEBODYWL));

	memcpy(&stFeature, &stMsgBodyWl.lParam1, sizeof(LONG));

	ChangeFeature(stFeature);
	SetMotionFrame(_MT_MON_HITTED, m_bCurrDir);

	// 阁胶磐老锭.
	if ( m_stHitter.bGender == _GENDER_MON )
	{
		CMagic* pxMagic;
		switch ( m_stHitter.bDress )
		{
		case 2:		// 纳迫肺橇.
			pxMagic = new CMagic;
			pxMagic->CreateMagic(_MONMAGIC_KEPAL, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
			g_xGameProc.m_xMagicList.AddNode(pxMagic);
			break;
		case 8:		// 癌林俺固.
		case 14:	// 捍侩俺固.
		case 16:	// 靛抄俺固.
			pxMagic = new CMagic;
			pxMagic->CreateMagic(_MONMAGIC_GREATANT, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
			g_xGameProc.m_xMagicList.AddNode(pxMagic);
			break;
		case 67:	// 盟锋脚.
			pxMagic = new CMagic;
			pxMagic->CreateMagic(_MONMAGIC_BIGGINE_CHAR, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
			g_xGameProc.m_xMagicList.AddNode(pxMagic);
			break;
		default :
			break;
		}
	}
	ZeroMemory(&m_stHitter, sizeof(FEATURE));
}


VOID CActor::OnLighting(LPPACKETMSG lpPacketMsg)
{
	WORD	wTargetX, wTargetY;
	INT		nTargetID;
	CMagic* pxMagic;

	m_wPosX      = lpPacketMsg->stDefMsg.wParam;
	m_wPosY		 = lpPacketMsg->stDefMsg.wTag;
	m_bCurrDir	 = lpPacketMsg->stDefMsg.wSeries;

	MESSAGEBODYWL stMsgBodyWl;
	fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stMsgBodyWl, sizeof(MESSAGEBODYWL));
	wTargetX = stMsgBodyWl.lParam1;
	wTargetY = stMsgBodyWl.lParam2;
	nTargetID = MAKELONG(stMsgBodyWl.nTag1, stMsgBodyWl.nTag2);

	switch ( m_stFeature.bDress )
	{
	case 48:		// 粱厚. 8规氢.
		pxMagic = new CMagic;
		pxMagic->CreateMagic(_MONMAGIC_ZOMBIE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this, nTargetID);
		g_xGameProc.m_xMagicList.AddNode(pxMagic);
		SetMotionFrame(_MT_MON_ATTACK_A, m_bCurrDir);
		break;
	}
}


VOID CActor::OnFlyAxe(LPPACKETMSG lpPacketMsg)

⌨️ 快捷键说明

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