📄 gameproc.cpp
字号:
case _GENDER_MON:
{
pxActor->UpdateMotionState(nLoopTime, bIsMoveTime);
if ( pxActor->m_bAppearState == _DIG_DOWNDEL )
{
m_xActorList.DeleteCurrentNodeEx();
delete((CActor*)pxActor);
pxActor = NULL;
}
else
{
m_xActorList.MoveNextNode();
nCnt++;
}
}
break;
}
if ( !pxActor )
continue;
if ( pxActor->m_wPosX >= m_xMap.m_shStartViewTileX && pxActor->m_wPosX < m_xMap.m_shStartViewTileX + _VIEW_CELL_X_COUNT &&
pxActor->m_wPosY >= m_xMap.m_shStartViewTileY && pxActor->m_wPosY < m_xMap.m_shStartViewTileY + _VIEW_CELL_Y_COUNT )
{
for ( nObjCnt = 0; nObjCnt < _MAX_CELL_OBJ; nObjCnt++ )
{
if ( m_stMemMappedID[pxActor->m_wPosY - m_xMap.m_shStartViewTileY][pxActor->m_wPosX - m_xMap.m_shStartViewTileX].pxActor[nObjCnt] == NULL )
{
bFocused = FALSE;
if ( pxActor == m_pxSavedTargetActor )
{
bIsSaveTargetExisted = TRUE;
}
// 弊覆狼 矫累谅钎, 器目胶惑怕, 弊覆磊 喉坊爹 惑怕甫 逞败霖促.
if ( !m_pxMouseTargetActor /*&& !pxActor->m_bIsDead*/ )
{
if ( PtInRect(&pxActor->m_rcActor, m_ptMousePos) )
{
m_pxMouseTargetActor = pxActor;
bFocused = TRUE;
}
}
else
{
if ( PtInRect(&pxActor->m_rcTargetRgn, m_ptMousePos) )
{
if ( !pxActor->m_bIsDead )
{
m_pxMouseTargetActor = pxActor;
bFocused = TRUE;
}
else
{
pxDeadTargetActor = pxActor;
bFocused = TRUE;
}
}
}
// 磷篮 Actor绰 菊栏肺 动变促.
if ( pxActor->m_bIsDead )
{
CActor* pxTempActor[_MAX_CELL_OBJ];
ZeroMemory(pxTempActor, sizeof(CActor*)*_MAX_CELL_OBJ);
pxTempActor[0] = pxActor;
memcpy(&pxTempActor[1], m_stMemMappedID[pxActor->m_wPosY - m_xMap.m_shStartViewTileY][pxActor->m_wPosX - m_xMap.m_shStartViewTileX].pxActor, sizeof(CActor*)*(_MAX_CELL_OBJ-1));
memcpy(m_stMemMappedID[pxActor->m_wPosY - m_xMap.m_shStartViewTileY][pxActor->m_wPosX - m_xMap.m_shStartViewTileX].pxActor, pxTempActor, sizeof(CActor*)*(_MAX_CELL_OBJ));
/* switch ( pxActor->m_stFeature.bGender )
{
case _GENDER_MAN:
case _GENDER_WOMAN:
{
CHero* pxHero;
pxHero = (CHero*)pxActor;
pxHero->DrawActor(&m_xMap, bFocused);
}
break;
case _GENDER_NPC:
{
CNPC* pxNPC;
pxNPC = (CNPC*)pxActor;
pxNPC->DrawActor(&m_xMap, bFocused);
}
break;
case _GENDER_MON:
{
pxActor->DrawActor(&m_xMap, bFocused);
}
break;
}
*/
}
else
m_stMemMappedID[pxActor->m_wPosY - m_xMap.m_shStartViewTileY][pxActor->m_wPosX - m_xMap.m_shStartViewTileX].pxActor[nObjCnt] = pxActor;
break;
}
}
}
}
if ( !bIsSaveTargetExisted ) m_pxSavedTargetActor = NULL;
if ( !m_pxMouseTargetActor && pxDeadTargetActor )
{
m_pxMouseTargetActor = pxDeadTargetActor;
}
CMagic* pxMagic;
m_xGroundMagicList.MoveCurrentToTop();
for ( nCnt = 0; nCnt < m_xGroundMagicList.GetCounter(); )
{
pxMagic = m_xGroundMagicList.GetCurrentData();
if ( pxMagic->m_bMagicNum == _SKILL_HOLYSHIELD || pxMagic->m_bMagicNum == _SKILL_EARTHFIRE )
{
CRepeatMagic* pxRepeatMagic = (CRepeatMagic*)pxMagic;
pxRepeatMagic->UpdateMagic(nLoopTime);
if ( pxRepeatMagic->m_bActiveState == _MAGIC_FINISH )
{
m_xGroundMagicList.DeleteCurrentNodeEx();
delete((CRepeatMagic*)pxRepeatMagic);
pxRepeatMagic = NULL;
}
else
{
if ( pxMagic->m_shTargetTileX >= m_xMap.m_shStartViewTileX && pxMagic->m_shTargetTileX < m_xMap.m_shStartViewTileX + _VIEW_CELL_X_COUNT &&
pxMagic->m_shTargetTileY >= m_xMap.m_shStartViewTileY && pxMagic->m_shTargetTileY < m_xMap.m_shStartViewTileY + _VIEW_CELL_Y_COUNT )
{
for ( nObjCnt = 0; nObjCnt < _MAX_CELL_OBJ; nObjCnt++ )
{
if ( m_stMemMappedID[pxMagic->m_shTargetTileY - m_xMap.m_shStartViewTileY][pxMagic->m_shTargetTileX - m_xMap.m_shStartViewTileX].pxMagic[nObjCnt] == NULL )
{
m_stMemMappedID[pxMagic->m_shTargetTileY - m_xMap.m_shStartViewTileY][pxMagic->m_shTargetTileX - m_xMap.m_shStartViewTileX].pxMagic[nObjCnt] = pxMagic;
break;
}
}
}
m_xGroundMagicList.MoveNextNode();
nCnt++;
}
}
else if ( pxMagic->m_bMagicNum == _SKILL_FIRE )
{
CMagicStream* pxMagicStream = (CMagicStream*)pxMagic;
pxMagicStream->UpdateMagic(nLoopTime);
if ( pxMagicStream->m_bActiveState == _MAGIC_FINISH )
{
m_xGroundMagicList.DeleteCurrentNodeEx();
delete((CMagicStream*)pxMagicStream);
pxMagicStream = NULL;
}
else
{
if ( pxMagic->m_shTargetTileX >= m_xMap.m_shStartViewTileX && pxMagic->m_shTargetTileX < m_xMap.m_shStartViewTileX + _VIEW_CELL_X_COUNT &&
pxMagic->m_shTargetTileY >= m_xMap.m_shStartViewTileY && pxMagic->m_shTargetTileY < m_xMap.m_shStartViewTileY + _VIEW_CELL_Y_COUNT )
{
for ( nObjCnt = 0; nObjCnt < _MAX_CELL_OBJ; nObjCnt++ )
{
if ( m_stMemMappedID[pxMagic->m_shTargetTileY - m_xMap.m_shStartViewTileY][pxMagic->m_shTargetTileX - m_xMap.m_shStartViewTileX].pxMagic[nObjCnt] == NULL )
{
m_stMemMappedID[pxMagic->m_shTargetTileY - m_xMap.m_shStartViewTileY][pxMagic->m_shTargetTileX - m_xMap.m_shStartViewTileX].pxMagic[nObjCnt] = pxMagic;
break;
}
}
}
m_xGroundMagicList.MoveNextNode();
nCnt++;
}
}
}
LPGROUNDITEM pstItem;
m_stMapItemList.MoveCurrentToTop();
for ( nCnt = 0; nCnt < m_stMapItemList.GetCounter(); nCnt++ )
{
pstItem = m_stMapItemList.GetCurrentData();
if ( pstItem->shTileX >= m_xMap.m_shStartViewTileX && pstItem->shTileX < m_xMap.m_shStartViewTileX + _VIEW_CELL_X_COUNT &&
pstItem->shTileY >= m_xMap.m_shStartViewTileY && pstItem->shTileY < m_xMap.m_shStartViewTileY + _VIEW_CELL_Y_COUNT )
{
for ( nObjCnt = 0; nObjCnt < _MAX_CELL_OBJ; nObjCnt++ )
{
if ( m_stMemMappedID[pstItem->shTileY - m_xMap.m_shStartViewTileY][pstItem->shTileX - m_xMap.m_shStartViewTileX].pstItem[nObjCnt] == NULL )
{
m_stMemMappedID[pstItem->shTileY - m_xMap.m_shStartViewTileY][pstItem->shTileX - m_xMap.m_shStartViewTileX].pstItem[nObjCnt] = pstItem;
break;
}
}
}
m_stMapItemList.MoveNextNode();
}
}
VOID CGameProcess::AutoTargeting()
{
static BYTE bLastDir = _DIRECTION_LIST_1;
if ( !m_xMyHero.m_bMotionLock && !m_xMyHero.m_bInputLock && m_pxSavedTargetActor )
{
SHORT shLeftMsgCnt = m_xMyHero.m_xPacketQueue.GetCount();
if ( shLeftMsgCnt > 0 )
{
if ( m_xMyHero.m_stFeatureEx.bHorse == _HORSE_NONE ) m_xMyHero.SetMotionState(_MT_STAND, m_xMyHero.m_bCurrDir);
else m_xMyHero.SetMotionState(_MT_HORSESTAND, m_xMyHero.m_bCurrDir);
m_xMyHero.UpdatePacketState();
return;
}
POINT ptTargetTile = {0, 0};
BYTE bDir = m_xMyHero.CalcDirection(m_pxSavedTargetActor->m_wPosX, m_pxSavedTargetActor->m_wPosY);
if ( m_pxSavedTargetActor->m_bIsDead )
return;
if ( (m_pxSavedTargetActor->m_stFeature.bGender == _GENDER_MON && m_pxSavedTargetActor->m_bCurrMtn == _MT_MON_DIE) ||
(m_pxSavedTargetActor->m_stFeature.bGender <= _GENDER_WOMAN && m_pxSavedTargetActor->m_bCurrMtn == _MT_DIE) )
return;
if ( (INT)(sqrt((double)(m_xMyHero.m_wPosX-m_pxSavedTargetActor->m_wPosX)*(m_xMyHero.m_wPosX-m_pxSavedTargetActor->m_wPosX) + (m_xMyHero.m_wPosY-m_pxSavedTargetActor->m_wPosY)*(m_xMyHero.m_wPosY-m_pxSavedTargetActor->m_wPosY)))
< 2 )
{
if ( m_xMyHero.m_stFeatureEx.bHorse == _HORSE_NONE && !m_pxSavedTargetActor->m_bIsDead )
{
// 傍拜茄促.
ptTargetTile.x = m_xMyHero.m_wPosX;
ptTargetTile.y = m_xMyHero.m_wPosY;
m_xMyHero.SetMotionState(_MT_ONEHSWING, bDir, m_pxSavedTargetActor->m_dwIdentity, m_pxSavedTargetActor->m_bIsDead, &ptTargetTile);
}
}
// Actor啊 乐绰 规氢栏肺 捞悼 啊瓷茄啊?(甘加己眉农)
else if ( m_xMap.GetNextTileCanMove(m_xMyHero.m_wPosX, m_xMyHero.m_wPosY, bDir, 1, &ptTargetTile) )
{
// 1鸥老 捞悼茄促.
if ( m_xMyHero.m_stFeatureEx.bHorse == _HORSE_NONE )
{
m_xMyHero.SetMotionState(_MT_WALK, bDir);
}
else
{
m_xMyHero.SetMotionState(_MT_HORSEWALK, bDir);
}
bLastDir = bDir;
}
else if ( !m_xMap.GetNextTileCanMove(m_xMyHero.m_wPosX, m_xMyHero.m_wPosY, bDir, 1, &ptTargetTile) )
{
BYTE bSelectedDirList[8] = {0, 0, 0, 0, 0, 0, 0, 0};
INT nSeclectedDirCnt = -1;
INT nLastDistance = 100;
INT nCurrDistance;
BYTE bInvDir;
BYTE bSelectedDir = 255;
if ( bLastDir < 4 ) bInvDir = bLastDir + 4;
else bInvDir = bLastDir - 4;
for ( INT nCnt = 0; nCnt < _MAX_DIRECTION; nCnt++ )
{
if ( m_xMap.GetNextTileCanMove(m_xMyHero.m_wPosX, m_xMyHero.m_wPosY, nCnt, 1, &ptTargetTile) )
{
nCurrDistance = (INT)(sqrt((double)(ptTargetTile.x-m_pxSavedTargetActor->m_wPosX)*(ptTargetTile.x-m_pxSavedTargetActor->m_wPosX) + (ptTargetTile.y-m_pxSavedTargetActor->m_wPosY)*(ptTargetTile.y-m_pxSavedTargetActor->m_wPosY)));
if ( nCurrDistance <= nLastDistance && bInvDir != nCnt )
{
nLastDistance = nCurrDistance;
nSeclectedDirCnt++;
bSelectedDirList[nSeclectedDirCnt] = nCnt;
}
}
}
BYTE bDirOrderList[8][8] =
{
{0, 7, 1, 6, 2, 5, 3, 4},
{1, 0, 2, 7, 3, 6, 4, 5},
{2, 1, 3, 0, 4, 7, 5, 6},
{3, 2, 4, 1, 5, 0, 6, 7},
{4, 5, 3, 6, 2, 7, 1, 0},
{5, 6, 4, 7, 3, 0, 2, 1},
{6, 7, 5, 0, 4, 1, 3, 2},
{7, 0, 6, 1, 5, 2, 4, 3},
};
BYTE bOrderCnt = 0;
for ( nCnt = 0; nCnt < nSeclectedDirCnt; nCnt++ )
{
while ( bSelectedDirList[nCnt] != bDirOrderList[bDir][bOrderCnt] || bOrderCnt < 8 ) bOrderCnt++;
if ( bOrderCnt >= 8 ) bOrderCnt = 0;
else
{ bSelectedDir = bLastDir = bSelectedDirList[nCnt]; break; }
}
if ( bSelectedDir == 255 ) bSelectedDir = bLastDir = bSelectedDirList[GetRandomNum(0, nSeclectedDirCnt+1)];
if ( nSeclectedDirCnt != -1 )
{
// 1鸥老 捞悼茄促.
m_xMap.GetNextTileCanMove(m_xMyHero.m_wPosX, m_xMyHero.m_wPosY, bSelectedDir, 1, &ptTargetTile);
if ( m_xMyHero.m_stFeatureEx.bHorse == _HORSE_NONE )
{
m_xMyHero.SetMotionState(_MT_WALK, bSelectedDir);
}
else
{
m_xMyHero.SetMotionState(_MT_HORSEWALK, bSelectedDir);
}
}
else
{
if ( m_xMyHero.m_stFeatureEx.bHorse == _HORSE_NONE )
{
m_xMyHero.SetMotionState(_MT_STAND, bDir);
}
else
{
m_xMyHero.SetMotionState(_MT_HORSESTAND, bDir);
}
}
}
else
{
if ( m_xMyHero.m_stFeatureEx.bHorse == _HORSE_NONE )
{
m_xMyHero.SetMotionState(_MT_STAND, bDir);
}
else
{
m_xMyHero.SetMotionState(_MT_HORSESTAND, bDir);
}
}
}
}
VOID CGameProcess::DropItemShow()
{
if ( m_stMapItemList.GetCounter() != 0 )
{
m_stMapItemList.MoveCurrentToTop();
LPGROUNDITEM pstItem;
for ( INT nCnt = 0; nCnt < m_stMapItemList.GetCounter(); nCnt++ )
{
pstItem = m_stMapItemList.GetCurrentData();
if ( pstItem->shTileX == m_ptCurrTile.x && pstItem->shTileY == m_ptCurrTile.y )
{
SIZE sizeLen;
sizeLen = g_xMainWnd.GetStrLength(NULL, NULL, pstItem->szItemName);
INT nCenterX = (pstItem->shTileX-m_xMap.m_shStartViewTileX)*_CELL_WIDTH +_VIEW_CELL_X_START-m_xMap.m_shViewOffsetX+_CELL_WIDTH /2;
INT nCenterY = (pstItem->shTileY-m_xMap.m_shStartViewTileY)*_CELL_HEIGHT+_VIEW_CELL_Y_START-m_xMap.m_shViewOffsetY+_CELL_HEIGHT/2-12;
RECT rcBack;
SetRect(&rcBack, nCenterX-sizeLen.cx/2, nCenterY-7, nCenterX+sizeLen.cx/2, nCenterY+8);
if ( g_xMainWnd.Get3DDevice() )
{
if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()) )
{
D3DVECTOR vTrans;
D3DMATRIX matTrans;
D3DMATRIX matScale;
D3DMATRIX matWorld;
D3DMATRIX matWorldOriginal;
g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
D3DMATERIAL7 mtrl;
vTrans.x = (FLOAT)rcBack.left-400+(rcBack.right-rcBack.left)/2-1;
vTrans.y = (FLOAT)-rcBack.top+300-4;
vTrans.z = 0;
D3DUtil_SetTranslateMatrix(matTrans, vTrans);
D3DUtil_SetScaleMatrix(matScale, (FLOAT)rcBack.right-rcBack.left, (FLOAT)rcBack.bottom-rcBack.top, 0.0f);
D3DMath_MatrixMultiply(matWorld, matScale, matTrans);
g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld);
D3DUtil_InitMaterial(mtrl,
(FLOAT)100/255.0f,
(FLOAT)100/255.0f,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -