📄 actor.cpp
字号:
/******************************************************************************************************************
葛碘疙:
累己磊:
累己老:
[老磊][荐沥磊] : 荐沥 郴侩
*******************************************************************************************************************/
#include "StdAfx.h"
/******************************************************************************************************************
CActor Class
*******************************************************************************************************************/
/******************************************************************************************************************
窃荐疙 : CActor::CActor()
累己磊 :
累己老 :
格利 :
免仿 :
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
CActor::CActor()
{
InitActor();
}
/******************************************************************************************************************
窃荐疙 : CActor::~CActor()
累己磊 :
累己老 :
格利 :
免仿 :
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
CActor::~CActor()
{
DestroyActor();
}
VOID CActor::InitActor()
{
m_wOldPosX = 0;
m_wOldPosY = 0;
m_bOldDir = 0;
m_bOpenHealth = FALSE;
m_bWarMode = FALSE;
m_bCurrMtn = _MT_MON_STAND;
m_bCurrDir = _DIRECTION_LIST_1;
m_bMoveDir = _DIRECTION_LIST_1;
m_bEffectFrameCnt = _DEFAULT_SPELLFRAME;
m_bHPPercent = 100;
m_bMoveNextFrmCnt = 5;
m_bIsMoved = FALSE;
m_dwWarModeTime = 0;
m_wMAXHP = 0;
m_wHP = 0;
m_wMP = 0;
m_wPosX = 0;
m_wPosY = 0;
m_bLightSize = 2;
m_shShiftPixelX = 0;
m_shShiftPixelY = 0;
m_shShiftTileX = 0;
m_shShiftTileY = 0;
m_bMoveSpeed = 0;
m_shScrnPosX = 0;
m_shScrnPosY = 0;
m_wCurrDelay = 0;
m_dwFstFrame = 0;
m_dwEndFrame = 1;
m_dwCurrFrame = 0;
m_wDelay = 0;
m_pxActorImage = NULL;
m_bMsgHurryCheck = FALSE;
m_bUseEffect = FALSE;
m_bUseSwordEffect = FALSE;
m_bReverse = FALSE;
m_bIsDead = FALSE;
m_bABlendRev = FALSE;
m_dwCurrEffectFrame = 0;
m_dwFstEffectFrame = 0;
m_dwEndEffectFrame = 0;
m_bEffectFrame = 0;
m_bBackStepFrame = 0;
m_bBackStepFrameCnt = 0;
m_nState = 0;
m_nDividedChatLine = 0;
m_dwIdentity = 0;
m_wCurrChatDelay = 0;
m_wABlendCurrDelay = 0;
m_wABlendCurrDelay = 0;
m_bFstSoundPlayed = FALSE;
m_bAppearState = _DIG_NORMAL;
m_wStateClr = _STATE_NOTUSED;
m_dwNameClr = RGB(255, 255, 255);
m_bActorImgIdx = _IMAGE_M_HUMAN;
m_bEffectImgIdx = _IMAGE_MAGIC;
ZeroMemory(m_szName, 64);
ZeroMemory(&m_stFeature, sizeof(FEATURE));
ZeroMemory(&m_stHitter, sizeof(FEATURE));
ZeroMemory(m_bLightRadius, sizeof(BYTE)*2);
ZeroMemory(m_bLightColor , sizeof(BYTE)*2*3);
ZeroMemory(m_szChatMsg, MAX_PATH);
ZeroMemory(m_szChatMsgArg, MAX_PATH*5);
ZeroMemory(&m_rcActor, sizeof(RECT));
ZeroMemory(&m_rcTargetRgn, sizeof(RECT));
D3DVECTOR vNorm(0, 0, -1);
m_avBoard[0] = D3DVERTEX(D3DVECTOR(-0.5f, 0.5f, 0), vNorm, 0, 0);
m_avBoard[1] = D3DVERTEX(D3DVECTOR(-0.5f,-0.5f, 0), vNorm, 0, 1);
m_avBoard[2] = D3DVERTEX(D3DVECTOR( 0.5f, 0.5f, 0), vNorm, 1, 0);
m_avBoard[3] = D3DVERTEX(D3DVECTOR( 0.5f,-0.5f, 0), vNorm, 1, 1);
}
VOID CActor::DestroyActor()
{
INT nCnt;
SHORT shLeftMsgCnt;
LPPACKETMSG lpPacketMsg;
lpPacketMsg = NULL;
shLeftMsgCnt = m_xPacketQueue.GetCount();
// 阶咯乐绰 菩哦阑 瘤款促.
if ( shLeftMsgCnt > 0 )
{
for ( nCnt = 0; nCnt < shLeftMsgCnt; nCnt++ )
{
lpPacketMsg = (LPPACKETMSG)m_xPacketQueue.PopQ();
if ( lpPacketMsg )
{
SAFE_DELETE(lpPacketMsg);
}
}
}
// 葛电函荐甫 檬扁拳 矫难敌促.
InitActor();
}
WORD CActor::GetCharState()
{
WORD wCharState = 0XFFFF;
// if( m_nState & 0X100000 ) wCharState = _STATE_SHIELDUSE;
if( m_nState & 0X800000 ) wCharState = _STATE_ABLEND;
if( m_nState & 0X4000000 ) wCharState = _STATE_GRAY;
if( m_nState & 0X8000000 ) wCharState = _STATE_FUCHSIA;
if( m_nState & 0X10000000 ) wCharState = _STATE_YELLOW;
if( m_nState & 0X20000000 ) wCharState = _STATE_BLUE;
if( m_nState & 0X40000000 ) wCharState = _STATE_RED;
if( m_nState & 0X80000000 ) wCharState = _STATE_GREEN;
m_wStateClr = _STATE_NOTUSED;
if ( m_wStateClr == _STATE_ABLEND || m_wStateClr == _STATE_SHIELDUSE )
m_wStateClr = _STATE_NOTUSED;
return wCharState;
}
VOID CActor::DrawWithEffected(INT nX, INT nY, INT nXSize, INT nYSize, WORD* pwSrc, WORD wChooseColor1, WORD wChooseColor2, BOOL bFocused, BYTE bOpa, WORD wState)
{
switch ( wState )
{
case _STATE_RED:
case _STATE_GREEN:
case _STATE_BLUE:
case _STATE_YELLOW:
case _STATE_FUCHSIA:
case _STATE_GRAY:
if ( m_wABlendDelay )
g_xMainWnd.DrawWithImageForCompClipRgnColor(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wState, bFocused, TRUE);
else
g_xMainWnd.DrawWithImageForCompClipRgnColor(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wState, bFocused, FALSE);
break;
case _STATE_ABLEND:
{
if ( bFocused ) bOpa -= 20;
if ( bOpa < 0 && bOpa > 100 ) bOpa = 0;
g_xMainWnd.DrawWithABlendCompDataWithBackBuffer(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wChooseColor1, wChooseColor2, bOpa);
}
break;
case _STATE_SHIELDUSE:
case _STATE_NOTUSED:
default:
{
if ( !m_wABlendDelay )
g_xMainWnd.DrawWithImageForCompClipRgn(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wChooseColor1, wChooseColor2, bFocused);
else
g_xMainWnd.DrawWithABlendCompDataWithBackBuffer(nX, nY, nXSize, nYSize, pwSrc, _CLIP_WIDTH, _CLIP_HEIGHT, wChooseColor1, wChooseColor2, bOpa);
}
break;
}
}
/******************************************************************************************************************
窃荐疙 : CActor::Create()
累己磊 :
累己老 :
格利 :
涝仿 : CImageHandler* pxImgHandler
FEATURE stFeature
BYTE bMtn
WORD bDir
WORD wPosX
WORD wPosY
免仿 : BOOL
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CActor::Create(CImageHandler* pxImgHandler, FEATURE* pstFeature, BYTE bMtn, WORD bDir, WORD wPosX, WORD wPosY)
{
// 傈崔牢磊 利侩 棺 犬牢./////////////////////////////////////////////////////////////////////////////////
if ( /*(pstFeature->bGender >= 0 && pstFeature->bGender < _MAX_GENDER) && */(bDir >= 0 && bDir < _MAX_DIRECTION) )
{
switch ( pstFeature->bGender )
{
case _GENDER_MAN:
{
if ( (pstFeature->bDress < 0 && pstFeature->bDress >= _MAX_HERO_KIND) ||
(bMtn < 0 && bMtn >= _MAX_HERO_MTN) )
return FALSE;
else
{
m_bActorImgIdx = _IMAGE_M_HUMAN;
m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[bMtn].wFstFrm + pstFeature->bDress*_MAX_HERO_FRAME + bDir*10;
m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[bMtn].wFrmCnt;
m_wDelay = g_xSpriteInfo.m_stHeroSpr[bMtn].wDelay;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
pstFeature->bHair = 2;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
}
break;
case _GENDER_WOMAN:
{
if ( (pstFeature->bDress < 0 && pstFeature->bDress >= _MAX_HERO_KIND) ||
(bMtn < 0 && bMtn >= _MAX_HERO_MTN) )
return FALSE;
else
{
m_bActorImgIdx = _IMAGE_WM_HUMAN;
m_dwFstFrame = g_xSpriteInfo.m_stHeroSpr[bMtn].wFstFrm + pstFeature->bDress*_MAX_HERO_FRAME + bDir*10;
m_dwEndFrame = m_dwFstFrame + g_xSpriteInfo.m_stHeroSpr[bMtn].wFrmCnt;
m_wDelay = g_xSpriteInfo.m_stHeroSpr[bMtn].wDelay;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
pstFeature->bHair = 2;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
}
break;
case _GENDER_MON:
{
if ( (pstFeature->bDress < 0 && pstFeature->bDress >= _MAX_MON_KIND) ||
(bMtn < 0 && bMtn >= _MAX_MON_MTN) )
return FALSE;
else
{
switch ( m_stFeature.bDress )
{
case 31: // 侥牢檬.
case 67: // 盟锋脚.
case 73: // 厚阜盔面.
case 104: // 利岿付.
bDir = 0;
case 106: // 气救芭固.
bDir = 1;
break;
default:
break;
}
g_xSpriteInfo.SetMonFrameInfo(pstFeature->bDress);
m_bActorImgIdx = _IMAGE_MONSTER1 + (pstFeature->bDress / 10);
m_dwFstFrame = g_xSpriteInfo.m_stMonSpr[bMtn].wFstFrm + (pstFeature->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:
{
if ( (pstFeature->bDress < 0 && pstFeature->bDress >= _MAX_NPC_KIND) ||
(bMtn < 0 && bMtn >= _MAX_NPC_MTN) )
return FALSE;
else
{
m_bActorImgIdx = _IMAGE_NPC;
bDir++; // bDir篮 0捞 瞪荐档 乐扁锭巩捞促.
bDir = bDir/3;
m_dwFstFrame = g_xSpriteInfo.m_stNPCSpr[bMtn].wFstFrm + pstFeature->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_wPosX = wPosX;
m_wPosY = wPosY;
memcpy(&m_stFeature, pstFeature, sizeof(FEATURE));
m_pxActorImage = &(pxImgHandler->m_xImageList[m_bActorImgIdx]);
m_dwCurrFrame = m_dwFstFrame;
m_bMoveDir = m_bCurrDir;
D3DVECTOR vNorm(0, 0, -1);
m_avBoard[0] = D3DVERTEX(D3DVECTOR(-0.5f, 0.5f, 0), vNorm, 0, 0);
m_avBoard[1] = D3DVERTEX(D3DVECTOR(-0.5f,-0.5f, 0), vNorm, 0, 1);
m_avBoard[2] = D3DVERTEX(D3DVECTOR( 0.5f, 0.5f, 0), vNorm, 1, 0);
m_avBoard[3] = D3DVERTEX(D3DVECTOR( 0.5f,-0.5f, 0), vNorm, 1, 1);
return TRUE;
}
return FALSE;
}
/******************************************************************************************************************
窃荐疙 : CActor::CheckFeatureValidate()
累己磊 :
累己老 :
格利 :
涝仿 : FEATURE stFeature
免仿 : BOOL
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CActor::CheckFeatureValidate(FEATURE stFeature)
{
// if ( (stFeature.bGender >= 0 && stFeature.bGender < _MAX_GENDER) )
{
switch ( stFeature.bGender )
{
case _GENDER_MAN:
case _GENDER_WOMAN:
if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_HERO_KIND ) return FALSE;
break;
case _GENDER_MON:
{
if ( stFeature.bDress < 0 && stFeature.bDress >= _MAX_MON_KIND ) return FALSE;
}
break;
case _GENDER_NPC:
default:
return FALSE;
}
}
return TRUE;
}
/******************************************************************************************************************
窃荐疙 : CActor::ChangeFeature()
累己磊 :
累己老 :
格利 :
涝仿 : CImageHandler* pxImgHandler
FEATURE stFeature
免仿 : BOOL
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CActor::ChangeFeature(FEATURE stFeature)
{
CImageHandler* pxImgHandler = &g_xGameProc.m_xImage;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -