📄 map.cpp
字号:
////////////////////////////////////////////////////////////////////////////////////////
bool Map::CheckNPCMoveable( BYTE pMapIndex, int x, int y, BYTE nNPC )
{
if( !(_MAP[pMapIndex][x][y].nCheckBit & CHK_MOVE) ) return false; // 捞悼 阂啊 瘤开牢 版快
if( _MAP[pMapIndex][x][y].dwHandle ) return false;
if( nNPC == MAP_MONSTER )
{
if( _MAP[pMapIndex][x][y].nCheckBit & CHK_SAFEZONE ) return false;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// NPC檬扁 困摹 硅摹
//
////////////////////////////////////////////////////////////////////////////////////////
void Map::AOI_NPCPut(NPC *pNpcHandle, _POINT_TILE pMoveTile,BYTE nNPC)
{
// --------------------------------------------------------------------------------
// 秦寸 甘狼 沥焊甫 掘澜
// --------------------------------------------------------------------------------
BYTE nMapLayer = pNpcHandle->m_nMapLayer;
if( nMapLayer >= m_nMaxLayer ) return;
int nMaxX = MapConfig[nMapLayer].nMaxX;
int nMaxY = MapConfig[nMapLayer].nMaxY;
// --------------------------------------------------------------------------------
// 秦寸 MAP俊 困摹矫糯
// --------------------------------------------------------------------------------
int nLevel = 0, i, j;
int nXFrom = 0, nXTo = 0;
int nYFrom = 0, nYTo = 0;
while( 1 )
{
nXFrom = pMoveTile.x - nLevel;
nXTo = pMoveTile.x + nLevel;
nYFrom = pMoveTile.y - nLevel;
nYTo = pMoveTile.y + nLevel;
nXFrom = MAX( nXFrom , 0 );
nXTo = MIN( nXTo , nMaxX );
nYFrom = MAX( nYFrom , 0 );
nYTo = MIN( nYTo , nMaxY );
for( i = nXFrom; i <= nXTo; i ++ )
{
for( j = nYFrom; j <= nYTo; j ++ )
{
// --------------------------------------------------------------------
// 框流 老荐 乐绰瘤 咯何 魄沥 (Tile 犬牢)
// 框流老荐 乐绰 困摹咯何 犬牢
// 救傈 瘤开捞 酒囱 版快
// --------------------------------------------------------------------
if( (_MAP[nMapLayer][i][j].nCheckBit & CHK_MOVE) == TRUE && (_MAP[nMapLayer][i][j].nCheckBit & CHK_SAFEZONE) == FALSE )
{
// PC/NPC啊 秦寸 Cell俊 粮犁 窍瘤 臼绰 版快
if( _MAP[nMapLayer][i][j].dwHandle == 0 )
{
EnterCriticalSection( &m_MapLock );
_MAP[nMapLayer][i][j].dwHandle = pNpcHandle->m_dwHandle;
_MAP[nMapLayer][i][j].pObject = pNpcHandle;
_MAP[nMapLayer][i][j].nType = nNPC; // NPC
LeaveCriticalSection( &m_MapLock );
// 秦寸 AOI蔼阑 历厘 矫糯
pNpcHandle->m_Tile.x = i;
pNpcHandle->m_Tile.y = j;
/*
秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快
--------------------------------------------------------
困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦
-> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
--------------------------------------------------------
*/
pNpcHandle->m_MoveTo.x = i * 100 + 50;
pNpcHandle->m_MoveTo.y = j * 100 + 50;
return; // LOOP狐廉 唱坷扁
}
}
}
}
nLevel ++;
// 漂沥 Level鳖瘤 贸府 窍瘤 给茄 版快
if( nLevel > 10 ) return;
}
return;
}
////////////////////////////////////////////////////////////////////////////////////////
// NPC甫 MAP俊 困摹 矫糯
//
// - 内靛甫 窜鉴拳 矫糯
// - 涝仿 Point啊 弥措 Size焊促 奴 版快 坷幅 贸府 累诀
////////////////////////////////////////////////////////////////////////////////////////
int Map::AOI_NPCMove( NPC* pNpcHandle , _POINT pMoveTile , BYTE nNPC )
{
// NPC狼 泅犁 困摹 <-> 框流老 芭府埃狼 烹苞 窍绰 鸥老阑 掘澜
_POINT_TILE NpcPoint = pNpcHandle->m_Tile;
// 2俺狼 芭府埃 扁匡扁甫 备窃
int x, y;
// --------------------------------------------------------------------------------
// 沤祸 备埃阑 唱穿绢辑 八祸 备埃阑 备窃
//
// |
// 4 | 1
// |
// --------+--------
// |
// 3 | 2
// |
//
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// 1 备埃
// --------------------------------------------------------------------------------
if( pMoveTile.x >= NpcPoint.x && pMoveTile.y >= NpcPoint.y )
{
for( x= pMoveTile.x; x >= NpcPoint.x; x -- )
{
for( y= pMoveTile.y; y >= NpcPoint.y; y -- )
{
if( NpcPoint.x == x && NpcPoint.y == y ) continue;
if( CheckNPCMoveable( pNpcHandle->m_nMapLayer, x, y, nNPC ) )
{
// ----------------------------------------------------------------
// NOTENOTE: 2003-10-30 badajoa CriticalSection甫 临捞扁 困茄 累诀
// ----------------------------------------------------------------
EnterCriticalSection( &m_MapLock );
AOI_PlayerFastDelete( pNpcHandle);
_MAP[pNpcHandle->m_nMapLayer][x][y].dwHandle = pNpcHandle->m_dwHandle;
_MAP[pNpcHandle->m_nMapLayer][x][y].pObject = pNpcHandle;
_MAP[pNpcHandle->m_nMapLayer][x][y].nType = nNPC; // NPC
LeaveCriticalSection( &m_MapLock );
// 秦寸 AOI蔼阑 历厘 矫糯
pNpcHandle->m_Tile.x = x;
pNpcHandle->m_Tile.y = y;
// ----------------------------------------------------------------
// 秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快
// ----------------------------------------------------------------
// 困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦
// -> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
// ----------------------------------------------------------------
pNpcHandle->m_MoveTo.x = x * 100 + 50;
pNpcHandle->m_MoveTo.y = y * 100 + 50;
return 0;
}
}
}
}
// --------------------------------------------------------------------------------
// 2 备埃
// --------------------------------------------------------------------------------
else if( pMoveTile.x >= NpcPoint.x && pMoveTile.y < NpcPoint.y )
{
for( x= pMoveTile.x; x >= NpcPoint.x; x -- )
{
for( y= pMoveTile.y; y <= NpcPoint.y; y ++ )
{
if( NpcPoint.x == x && NpcPoint.y == y ) continue;
if( CheckNPCMoveable( pNpcHandle->m_nMapLayer, x, y, nNPC ) )
{
// ----------------------------------------------------------------
// NOTENOTE: 2003-10-30 badajoa CriticalSection甫 临捞扁 困茄 累诀
// ----------------------------------------------------------------
EnterCriticalSection( &m_MapLock );
AOI_PlayerFastDelete( pNpcHandle);
_MAP[pNpcHandle->m_nMapLayer][x][y].dwHandle = pNpcHandle->m_dwHandle;
_MAP[pNpcHandle->m_nMapLayer][x][y].pObject = pNpcHandle;
_MAP[pNpcHandle->m_nMapLayer][x][y].nType = nNPC; // NPC
LeaveCriticalSection( &m_MapLock );
// ----------------------------------------------------------------
// 秦寸 AOI蔼阑 历厘 矫糯
// ----------------------------------------------------------------
pNpcHandle->m_Tile.x = x;
pNpcHandle->m_Tile.y = y;
// ----------------------------------------------------------------
// 秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快
// ----------------------------------------------------------------
// 困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦
// -> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
// ----------------------------------------------------------------
pNpcHandle->m_MoveTo.x = x * 100 + 50;
pNpcHandle->m_MoveTo.y = y * 100 + 50;
return 0;
}
}
}
}
// --------------------------------------------------------------------------------
// 3 备埃
// --------------------------------------------------------------------------------
else if( pMoveTile.x < NpcPoint.x && pMoveTile.y < NpcPoint.y )
{
for( x= pMoveTile.x; x <= NpcPoint.x; x ++ )
{
for( y= pMoveTile.y; y <= NpcPoint.y; y ++ )
{
if( NpcPoint.x == x && NpcPoint.y == y ) continue;
if( CheckNPCMoveable( pNpcHandle->m_nMapLayer, x, y, nNPC ) )
{
// ----------------------------------------------------------------
// NOTENOTE: 2003-10-30 badajoa CriticalSection甫 临捞扁 困茄 累诀
// ----------------------------------------------------------------
EnterCriticalSection( &m_MapLock );
AOI_PlayerFastDelete( pNpcHandle );
_MAP[pNpcHandle->m_nMapLayer][x][y].dwHandle= pNpcHandle->m_dwHandle;
_MAP[pNpcHandle->m_nMapLayer][x][y].pObject = pNpcHandle;
_MAP[pNpcHandle->m_nMapLayer][x][y].nType = nNPC; // NPC
LeaveCriticalSection( &m_MapLock );
// ----------------------------------------------------------------
// 秦寸 AOI蔼阑 历厘 矫糯
// ----------------------------------------------------------------
pNpcHandle->m_Tile.x = x;
pNpcHandle->m_Tile.y = y;
// ----------------------------------------------------------------
// 秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快
// ----------------------------------------------------------------
// 困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦
// -> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
// ----------------------------------------------------------------
pNpcHandle->m_MoveTo.x = x * 100 + 50;
pNpcHandle->m_MoveTo.y = y * 100 + 50;
return 0;
}
}
}
}
// --------------------------------------------------------------------------------
// 4 备埃
// --------------------------------------------------------------------------------
else
{
for( x= pMoveTile.x; x <= NpcPoint.x; x ++ )
{
for( y= pMoveTile.y; y >= NpcPoint.y; y -- )
{
if( NpcPoint.x == x && NpcPoint.y == y ) continue;
if( CheckNPCMoveable( pNpcHandle->m_nMapLayer, x, y, nNPC ) )
{
// ----------------------------------------------------------------
// NOTENOTE: 2003-10-30 badajoa CriticalSection甫 临捞扁 困茄 累诀
// ----------------------------------------------------------------
EnterCriticalSection( &m_MapLock );
AOI_PlayerFastDelete( pNpcHandle);
_MAP[pNpcHandle->m_nMapLayer][x][y].dwHandle = pNpcHandle->m_dwHandle;
_MAP[pNpcHandle->m_nMapLayer][x][y].pObject = pNpcHandle;
_MAP[pNpcHandle->m_nMapLayer][x][y].nType = nNPC; // NPC
LeaveCriticalSection( &m_MapLock );
// ----------------------------------------------------------------
// 秦寸 AOI蔼阑 历厘 矫糯
// ----------------------------------------------------------------
pNpcHandle->m_Tile.x = x;
pNpcHandle->m_Tile.y = y;
// ----------------------------------------------------------------
// 秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快
// ----------------------------------------------------------------
// 困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦
// -> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
// ----------------------------------------------------------------
pNpcHandle->m_MoveTo.x = x * 100 + 50;
pNpcHandle->m_MoveTo.y = y * 100 + 50;
return 0;
}
}
}
}
return -1;
}
////////////////////////////////////////////////////////////////////////////////////////
// AOI郴俊 捞悼 啊瓷 困摹甫 掘澜 (TILE窜困 眉农)
////////////////////////////////////////////////////////////////////////////////////////
int Map::AOI_MovePoint( BYTE pMapLayer, _POINT_TILE pTile)
{
// --------------------------------------------------------------------------------
// 秦寸 甘狼 沥焊甫 掘澜
// --------------------------------------------------------------------------------
if( pMapLayer >= m_nMaxLayer ) return -1;
int nMaxX = MapConfig[pMapLayer].nMaxX;
int nMaxY = MapConfig[pMapLayer].nMaxY;
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
int nLevel = 0, i, j;
int nXFrom = 0, nXTo = 0;
int nYFrom = 0, nYTo = 0;
while( 1 )
{
nXFrom = pTile.x - nLevel;
nXTo = pTile.x + nLevel;
nYFrom = pTile.y - nLevel;
nYTo = pTile.y + nLevel;
nXFrom = MAX( nXFrom , 0 );
nXTo = MIN( nXTo , nMaxX );
nYFrom = MAX( nYFrom , 0 );
nYTo = MIN( nYTo , nMaxY );
for( i = nXFrom; i <= nXTo; i ++ )
{
for( j = nYFrom; j <= nYTo; j ++ )
{
/*
框流 老荐 乐绰瘤 咯何 魄沥 (Tile 犬牢)
- 框流老荐 乐绰 困摹 犬牢
- 救傈 瘤开捞 酒囱 版快
*/
if( (_MAP[pMapLayer][i][j].nCheckBit & CHK_MOVE) == TRUE && (_MAP[pMapLayer][i][j].nCheckBit & CHK_SAFEZONE) == FALSE )
{
pTile.x = i;
pTile.y = j;
return nLevel; // LOOP狐廉 唱坷扁
}
}
}
nLevel ++;
// 漂沥 Level鳖瘤 贸府 窍瘤 给茄 版快
if( nLevel > 10 ) return -1;
}
return nLevel;
}
////////////////////////////////////////////////////////////////////////////////////////
// Item捞 MAP俊 积己 瞪锭
//
////////////////////////////////////////////////////////////////////////////////////////
int Map::AOI_ItemCreate(CItem *pItem, _POINT_TILE pTile)
{
if( !pItem ) return -1;
// --------------------------------------------------------------------------------
// 秦寸 甘狼 沥焊甫 掘澜
// --------------------------------------------------------------------------------
BYTE nMapLayer = pItem->m_nMapLayer;
if( nMapLayer >= m_nMaxLayer ) return -1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -