📄 actor.cpp
字号:
{
WORD wTargetX, wTargetY;
INT nTargetID;
CMagic* pxMagic;
m_wPosX = lpPacketMsg->stDefMsg.wParam;
m_wPosY = lpPacketMsg->stDefMsg.wTag;
m_bCurrDir = lpPacketMsg->stDefMsg.wSeries;
MESSAGEBODYW stMsgBodyW;
fnDecode6BitBuf(lpPacketMsg->szEncodeData, (char*)&stMsgBodyW, sizeof(MESSAGEBODYW));
wTargetX = stMsgBodyW.wParam1;
wTargetY = stMsgBodyW.wParam2;
nTargetID = MAKELONG(stMsgBodyW.wTag1, stMsgBodyW.wTag2);
switch ( m_stFeature.bDress )
{
case 33: // 街档尝秦榜.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_DUALAXE, m_wPosX, m_wPosY, wTargetX, wTargetY, this, nTargetID);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
SetMotionFrame(_MT_MON_ATTACK_A, m_bCurrDir);
break;
case 46: // 促农.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_CHIM, m_wPosX, m_wPosY, wTargetX, wTargetY, this, nTargetID);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
SetMotionFrame(_MT_MON_ATTACK_A, m_bCurrDir);
break;
case 82: // 付泵荤.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_MAARROW, m_wPosX, m_wPosY, wTargetX, wTargetY, this, nTargetID);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
SetMotionFrame(_MT_MON_ATTACK_A, m_bCurrDir);
break;
}
}
VOID CActor::OnHit(LPPACKETMSG lpPacketMsg)
{
BYTE bDir;
bDir = lpPacketMsg->stDefMsg.wSeries;
m_wPosX = lpPacketMsg->stDefMsg.wParam;
m_wPosY = lpPacketMsg->stDefMsg.wTag;
SetMotionFrame(_MT_MON_ATTACK_A, bDir);
// 阁胶磐老锭.
if ( m_stFeature.bGender == _GENDER_MON )
{
CMagic* pxMagic;
switch ( m_stFeature.bDress )
{
case 9: // 沸.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_EXPLODE, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 5: // 官捻啊福唱.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_BLACK1, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 19: // 饭叼啊福唱.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_RED1, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 45: // 快搁蓖空.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_COWGHOST, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 90: // 脚荐.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_SINSU, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 43: // 拳堪快搁蓖.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_COWFLAME, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 85: // 林付空.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_JUMAWANG, 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_ATT, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 75: // 禁扁唱规.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_SSEGI, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 94: // 荤绢.
pxMagic = new CMagic;
pxMagic->CreateMagic(_MONMAGIC_SANDFISH, m_wPosX, m_wPosY, m_wPosX, m_wPosY, this);
g_xGameProc.m_xMagicList.AddNode(pxMagic);
break;
case 98: // 惑鞭鲍拱.
m_dwCurrEffectFrame = 50;
m_dwFstEffectFrame = 50;
m_dwEndEffectFrame = 60;
m_bEffectFrame = 0;
m_bEffectFrameCnt = _DEFAULT_SPELLFRAME;
LoadEffect(&g_xGameProc.m_xImage, _MONMAGIC_NUMAGUMGI, bDir);
m_bUseSwordEffect = TRUE;
break;
default :
break;
}
}
}
VOID CActor::StruckMsgReassign()
{
INT nCnt;
SHORT shLeftMsgCnt;
LPPACKETMSG lpPacketMsg;
lpPacketMsg = NULL;
shLeftMsgCnt = m_xPacketQueue.GetCount();
if ( shLeftMsgCnt > 1 )
{
for ( nCnt = 0; nCnt < shLeftMsgCnt; nCnt++ )
{
lpPacketMsg = (LPPACKETMSG)m_xPacketQueue.PopQ();
if ( lpPacketMsg )
{
if ( lpPacketMsg->stDefMsg.wIdent == SM_STRUCK )
{
SAFE_DELETE(lpPacketMsg);
}
else
{
m_xPacketQueue.PushQ((BYTE*)lpPacketMsg);
}
}
}
}
}
/******************************************************************************************************************
窃荐疙 : CActor::UpdatePacketState()
累己磊 :
累己老 :
格利 :
免仿 : BOOL
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CActor::UpdatePacketState()
{
LPPACKETMSG lpPacketMsg = NULL;
if ( m_bCurrMtn == _MT_MON_STAND )
{
SHORT shLeftMsgCnt = m_xPacketQueue.GetCount();
if ( shLeftMsgCnt > 0 )
{
lpPacketMsg = (LPPACKETMSG)m_xPacketQueue.PopQ();
if ( shLeftMsgCnt >= 3 ) m_bMsgHurryCheck = TRUE;
else m_bMsgHurryCheck = FALSE;
if ( lpPacketMsg )
{
switch ( lpPacketMsg->stDefMsg.wIdent )
{
case SM_NOWDEATH:
case SM_DEATH: { OnDeath(lpPacketMsg); break; }
case SM_WALK: { OnWalk(lpPacketMsg); break; }
case SM_TURN: { OnTurn(lpPacketMsg); break; }
case SM_DIGUP: { OnDigup(lpPacketMsg); break; }
case SM_DIGDOWN: { OnDigDown(lpPacketMsg); break; }
case SM_FEATURECHANGED: { OnFeatureChanged(lpPacketMsg); break; }
case SM_OPENHEALTH: { OnOpenHealth(lpPacketMsg); break; }
case SM_CLOSEHEALTH: { OnCloseHealth(lpPacketMsg); break; }
case SM_CHANGELIGHT: { OnChangeLight(lpPacketMsg); break; }
case SM_CHANGENAMECOLOR: { OnChangeNameClr(lpPacketMsg); break; }
case SM_USERNAME: { OnUserName(lpPacketMsg); break; }
case SM_HEALTHSPELLCHANGED: { OnHealthSpellChanged(lpPacketMsg); break; }
case SM_BACKSTEP: { OnBackStep(lpPacketMsg); break; }
case SM_STRUCK: { OnStruck(lpPacketMsg); break; }
case SM_HIT: { OnHit(lpPacketMsg); break; }
case SM_FLYAXE: { OnFlyAxe(lpPacketMsg); break; }
case SM_LIGHTING: { OnLighting(lpPacketMsg); break; }
case SM_SKELETON:
OnWalk(lpPacketMsg);
break;
default:
{
break;
}
}
}
SAFE_DELETE(lpPacketMsg);
return TRUE;
}
}
return FALSE;
}
/******************************************************************************************************************
窃荐疙 : CActor::LoadEffect()
累己磊 :
累己老 :
格利 :
涝仿 : CImageHandler* pxImgHandler
WORD wEffectNum
BYTE bDir
免仿 : BOOL
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CActor::LoadEffect(CImageHandler* pxImgHandler, WORD wEffectNum, BYTE bDir)
{
WORD wFileType;
LPEFFECTSPRINFO pstEffect = g_xSpriteInfo.GetEffectInfo(wEffectNum);
if ( pstEffect )
{
m_bEffectImgIdx = pstEffect->wImgIdx;
m_dwFstEffectFrame = pstEffect->dwFstFrm;
m_dwEndEffectFrame = pstEffect->dwEndFrm;
if ( bDir )
{
m_dwFstEffectFrame = m_dwFstEffectFrame + bDir*10;
m_dwEndEffectFrame = m_dwEndEffectFrame + bDir*10;
}
m_dwCurrEffectFrame = m_dwFstEffectFrame;
m_bEffectFrame = 0;
m_bLightRadius[0] = pstEffect->bLightRadius[0];
m_bLightRadius[1] = pstEffect->bLightRadius[1];
m_bLightColor[0][0] = pstEffect->bLightColor[0][0];
m_bLightColor[0][1] = pstEffect->bLightColor[0][1];
m_bLightColor[0][2] = pstEffect->bLightColor[0][2];
m_bLightColor[1][0] = pstEffect->bLightColor[1][0];
m_bLightColor[1][1] = pstEffect->bLightColor[1][1];
m_bLightColor[1][2] = pstEffect->bLightColor[1][2];
for ( INT nCnt = m_dwFstEffectFrame; nCnt < m_dwEndEffectFrame; nCnt++ )
{
if ( m_bEffectImgIdx == _IMAGE_MAGIC )
{
wFileType = _TEXTR_FILE_MAGIC;
}
else if ( m_bEffectImgIdx == _IMAGE_MONMAGIC )
{
wFileType = _TEXTR_FILE_MONMAGIC;
}
pxImgHandler->AddTextr(wFileType, m_bEffectImgIdx, nCnt);
}
return TRUE;
}
return FALSE;
}
/******************************************************************************************************************
窃荐疙 : CActor::DrawEffect()
累己磊 :
累己老 :
格利 :
免仿 : BOOL
[老磊][荐沥磊] : 荐沥郴侩
*******************************************************************************************************************/
BOOL CActor::DrawEffect()
{
if ( g_xMainWnd.Get3DDevice() )
{
if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()) )
{
WORD wFileType;
D3DVECTOR vTrans;
D3DMATRIX matTrans;
D3DMATRIX matScale;
D3DMATRIX matRot;
D3DMATRIX matWorld;
D3DMATRIX matWorldOriginal;
g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
D3DMATERIAL7 mtrl;
CWHWilImageData* pxWilImg;
if ( m_bUseEffect || m_bUseSwordEffect )
{
BOOL bIndexSetted = FALSE;
if ( m_bUseEffect )
{
pxWilImg = &g_xGameProc.m_xImage.m_xImageList[m_bEffectImgIdx];
bIndexSetted = pxWilImg->NewSetIndex(m_dwCurrEffectFrame);
}
else
{
pxWilImg = &g_xGameProc.m_xImage.m_xImageList[m_bEffectImgIdx];
m_dwCurrEffectFrame = m_dwFstEffectFrame + m_dwCurrFrame - m_dwFstFrame;
bIndexSetted = pxWilImg->NewSetIndex(m_dwCurrEffectFrame);
}
if ( bIndexSetted )
{
vTrans.x = (FLOAT)m_shScrnPosX+(FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shWidth/2+pxWilImg->m_lpstNewCurrWilImageInfo->shPX-400;
vTrans.y = (FLOAT)-m_shScrnPosY-(FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shHeight/2-pxWilImg->m_lpstNewCurrWilImageInfo->shPY+300;
vTrans.z = 0;
D3DUtil_SetTranslateMatrix(matTrans, vTrans);
D3DUtil_SetScaleMatrix(matScale, (FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shWidth, (FLOAT)pxWilImg->m_lpstNewCurrWilImageInfo->shHeight, 0.0f);
D3DMath_MatrixMultiply(matWorld, matScale, matTrans);
g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld);
if ( m_bEffectImgIdx == _IMAGE_MAGIC )
{
wFileType = _TEXTR_FILE_MAGIC;
}
else if ( m_bEffectImgIdx == _IMAGE_MONMAGIC )
{
wFileType = _TEXTR_FILE_MONMAGIC;
}
LPDIRECTDRAWSURFACE7 lpddsTextr = g_xGameProc.m_xImage.GetTextrImg(wFileType, m_bEffectImgIdx, m_dwCurrEffectFrame);
g_xMainWnd.Get3DDevice()->SetTexture(0, lpddsTextr);
// g_xMainWnd.Get3DDevice()->SetTexture(0, D3DWILTextr_GetSurface(pxWilImg->m_szWilFileName, m_dwCurrEffectFrame));
D3DUtil_InitMaterial(mtrl,
(FLOAT)255/255.0f,
(FLOAT)255/255.0f,
(FLOAT)255/255.0f);
mtrl.diffuse.a = 0/255.0f;
g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
SetBlendRenderState(g_xMainWnd.Get3DDevice(), _BLEND_LIGHTINV, mtrl);
g_xMainWnd.Get3DDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, m_avBoard, 4, NULL);
// 盔惑汗蓖.
ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.diffuse.r = mtrl.diffuse.g = mtrl.diffuse.b = 0.1f;
mtrl.ambient.r = mtrl.ambient.g = mtrl.ambient.b = 1.0f;
g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
ResetBlendenderState(g_xMainWnd.Get3DDevice());
g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
}
if ( m_bUseEffect )
{
if ( m_bEffectFrame < m_bEffectFrameCnt / 2 )
{
m_bLightRadius[0] = m_bEffectFrame;
m_bLightRadius[1] = m_bEffectFrame+1;
}
else
{
m_bLightRadius[0] = m_bEffectFrameCnt - m_bEffectFrame -1;
m_bLightRadius[1] = m_bEffectFrameCnt - m_bEffectFrame;
}
g_xGameProc.m_xLightFog.SetLightRadiusWithRing(
m_shScrnPosX + _CELL_WIDTH/2,
m_shScrnPosY + _CELL_HEIGHT/2,
m_bLightRadius[0], m_bLightColor[0][0], m_bLightColor[0][1], m_bLightColor[0][2],
m_bLightRadius[1], m_bLightColor[1][0], m_bLightColor[1][1], m_bLightColor[1][2]);
}
else if ( m_bUseSwordEffect )
{
if ( m_dwEndEffectFrame - m_dwFstEffectFrame > 8 )
{
m_bLightRadius[0] = (m_dwCurrEffectFrame - m_dwFstEffectFrame)/2 + 2;
m_bLightRadius[1] = (m_dwCurrEffectFrame - m_dwFstEffectFrame)/2 + 3;
}
else
{
m_bLightRadius[0] = m_dwCurrEffectFrame - m_dwFstEffectFrame + 2;
m_bLightRadius[1] = m_dwCurrEffectFrame - m_dwFstEffectFrame + 3;
}
g_xGameProc.m_xLightFog.SetLightRadiusWithRing(
m_shScrnPosX + _CELL_WIDTH/2,
m_shScrnPosY + _CELL_HEIGHT/2,
m_bLightRadius[0], m_bLightColor[0][0], m_bLightColor[0][1], m_bLightColor[0][2],
m_bLightRadius[1], m_bLightColor[1][0], m_bLightColor[1][1], m_bLightColor[1][2]);
}
}
g_xMainWnd.Get3DDevice()->EndScene();
return S_OK;
}
}
return E_FAIL;
}
/******************************************************************************************************************
窃荐疙 : CActor::UpdateMotionState()
累己磊 :
累己老 :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -