📄 handler_map.cpp
字号:
// LeaveCriticalSection(&pMapCellInfo->m_cs);
return TRUE;
}
}
pListNode = pMapCellInfo->m_xpObjectList->GetNext(pListNode);
} // while (pListNode)
} // if (pMapCellInfo->m_pObjectList.GetCount())
// LeaveCriticalSection(&pMapCellInfo->m_cs);
}
return FALSE;
}
BOOL CMirMap::AddNewObject(int nX, int nY, BYTE btType, VOID* pAddObject)
{
CMapCellInfo* pMapCellInfo = GetMapCellInfo(nX, nY);
if (pMapCellInfo)
{
if (pMapCellInfo->m_chFlag & 0x01)
{
if (!pMapCellInfo->m_xpObjectList)
pMapCellInfo->m_xpObjectList = new CWHList<_LPTOSOBJECT>;
_LPTOSOBJECT pOSObject = new _TOSOBJECT;
if (pOSObject)
{
// EnterCriticalSection(&pMapCellInfo->m_cs);
pOSObject->btType = btType;
pOSObject->pObject = pAddObject;
pOSObject->dwAddTime = GetTickCount();
pMapCellInfo->m_xpObjectList->AddNewNode(pOSObject);
// LeaveCriticalSection(&pMapCellInfo->m_cs);
return TRUE;
}
}
}
return FALSE;
}
CCharObject* CMirMap::GetObject(int nX, int nY)
{
CMapCellInfo* pMapCellInfo = GetMapCellInfo(nX, nY);
_LPTOSOBJECT pOSObject;
PLISTNODE pListNode;
if (pMapCellInfo)
{
if (!(pMapCellInfo->m_chFlag & 0x01))
return NULL;
// EnterCriticalSection(&pMapCellInfo->m_cs);
if (pMapCellInfo->m_xpObjectList)
{
if (pMapCellInfo->m_xpObjectList->GetCount())
{
pListNode = pMapCellInfo->m_xpObjectList->GetHead();
while (pListNode)
{
pOSObject = pMapCellInfo->m_xpObjectList->GetData(pListNode);
if (pOSObject)
{
if (pOSObject->btType == OS_MOVINGOBJECT)
{
CCharObject* pCharObject = (CCharObject*)pOSObject->pObject;
if (!pCharObject->m_fIsDead && !pCharObject->m_fIsGhost)
{
// LeaveCriticalSection(&pMapCellInfo->m_cs);
return pCharObject;
}
}
}
pListNode = pMapCellInfo->m_xpObjectList->GetNext(pListNode);
} // while (pListNode)
} // if (pMapCellInfo->m_pObjectList.GetCount())
}
// LeaveCriticalSection(&pMapCellInfo->m_cs);
}
return NULL;
}
void CMirMap::GetMapObject(int nX, int nY, int nArea, CWHList<CCharObject*>* pList)
{
int nStartX = nX - nArea;
int nEndX = nX + nArea;
int nStartY = nY - nArea;
int nEndY = nY + nArea;
_LPTOSOBJECT pOSObject;
__try
{
for (int x = nStartX; x <= nEndX; x++)
{
for (int y = nStartY; y <= nEndY; y++)
{
if (CMapCellInfo* pMapCellInfo = GetMapCellInfo(x, y))
{
// EnterCriticalSection(&pMapCellInfo->m_cs);
if (pMapCellInfo->m_xpObjectList)
{
if (pMapCellInfo->m_xpObjectList->GetCount())
{
PLISTNODE pListNode = pMapCellInfo->m_xpObjectList->GetHead();
while (pListNode)
{
pOSObject = pMapCellInfo->m_xpObjectList->GetData(pListNode);
if (pOSObject->btType == OS_MOVINGOBJECT)
{
CCharObject* pCharObject = (CCharObject*)pOSObject->pObject;
if (!pCharObject->m_fIsGhost && !pCharObject->m_fIsDead )
pList->AddNewNode(pCharObject);
}
pListNode = pMapCellInfo->m_xpObjectList->GetNext(pListNode);
} // while (pListNode)
} // if (pMapCellInfo->m_pObjectList.GetCount())
}
// LeaveCriticalSection(&pMapCellInfo->m_cs);
} // if (pMapCellInfo)
}// for (y)
} // for (x)
}
__finally
{
}
}
void CMirMap::GetAllObject(int nX, int nY, CWHList<CCharObject*>* pList)
{
_LPTOSOBJECT pOSObject;
if (CMapCellInfo* pMapCellInfo = GetMapCellInfo(nX, nY))
{
// EnterCriticalSection(&pMapCellInfo->m_cs);
if (pMapCellInfo->m_xpObjectList)
{
if (pMapCellInfo->m_xpObjectList->GetCount())
{
PLISTNODE pListNode = pMapCellInfo->m_xpObjectList->GetHead();
while (pListNode)
{
pOSObject = pMapCellInfo->m_xpObjectList->GetData(pListNode);
if (pOSObject->btType == OS_MOVINGOBJECT)
{
CCharObject* pCharObject = (CCharObject*)pOSObject->pObject;
if (!pCharObject->m_fIsGhost && !pCharObject->m_fIsDead )
pList->AddNewNode(pCharObject);
}
pListNode = pMapCellInfo->m_xpObjectList->GetNext(pListNode);
} // while (pListNode)
} // if (pMapCellInfo->m_pObjectList.GetCount())
}
// LeaveCriticalSection(&pMapCellInfo->m_cs);
} // if (pMapCellInfo)
}
int CMirMap::GetDupCount(int nX, int nY)
{
CMapCellInfo* pMapCellInfo = GetMapCellInfo(nX, nY);
_LPTOSOBJECT pOSObject;
PLISTNODE pListNode;
int nCount = 0;
if (pMapCellInfo)
{
// EnterCriticalSection(&pMapCellInfo->m_cs);
if (pMapCellInfo->m_xpObjectList)
{
if (pMapCellInfo->m_xpObjectList->GetCount())
{
pListNode = pMapCellInfo->m_xpObjectList->GetHead();
while (pListNode)
{
pOSObject = pMapCellInfo->m_xpObjectList->GetData(pListNode);
if (pOSObject)
{
if (pOSObject->btType == OS_MOVINGOBJECT)
{
CCharObject* pCharObject = (CCharObject*)pOSObject->pObject;
if (!pCharObject->m_fIsDead && !pCharObject->m_fIsGhost && !pCharObject->m_fHideMode)
nCount++;
}
}
pListNode = pMapCellInfo->m_xpObjectList->GetNext(pListNode);
} // while (pListNode)
} // if (pMapCellInfo->m_pObjectList.GetCount())
}
// LeaveCriticalSection(&pMapCellInfo->m_cs);
}
return nCount;
}
CMapItem* CMirMap::GetItem(int nX, int nY)
{
CMapCellInfo* pMapCellInfo = GetMapCellInfo(nX, nY);
_LPTOSOBJECT pOSObject;
PLISTNODE pListNode;
if (pMapCellInfo)
{
// EnterCriticalSection(&pMapCellInfo->m_cs);
if (!(pMapCellInfo->m_chFlag & 0x01))
return NULL;
if (pMapCellInfo->m_xpObjectList)
{
if (pMapCellInfo->m_xpObjectList->GetCount())
{
pListNode = pMapCellInfo->m_xpObjectList->GetHead();
while (pListNode)
{
pOSObject = pMapCellInfo->m_xpObjectList->GetData(pListNode);
if (pOSObject)
{
if (pOSObject->btType == OS_ITEMOBJECT)
{
// LeaveCriticalSection(&pMapCellInfo->m_cs);
return (CMapItem*)pOSObject->pObject;
}
}
pListNode = pMapCellInfo->m_xpObjectList->GetNext(pListNode);
} // while (pListNode)
} // if (pMapCellInfo->m_pObjectList.GetCount())
}
// LeaveCriticalSection(&pMapCellInfo->m_cs);
}
return NULL;
}
BOOL CMirMap::GetDropPosition(int nOrgX, int nOrgY, int nRange, int &nX, int &nY)
{
int nLoonCnt = (4 * nRange) * (nRange + 1);
for (int i = 0; i < nLoonCnt; i++)
{
nX = nOrgX + g_SearchTable[i].x;
nY = nOrgY + g_SearchTable[i].y;
if (GetItem(nX, nY) == NULL)
return TRUE;
}
nX = nOrgX;
nY = nOrgY;
return FALSE;
}
CEvent* CMirMap::GetEvent(int nX, int nY)
{
CMapCellInfo* pMapCellInfo = GetMapCellInfo(nX, nY);
_LPTOSOBJECT pOSObject;
PLISTNODE pListNode;
if (pMapCellInfo)
{
// EnterCriticalSection(&pMapCellInfo->m_cs);
if (!(pMapCellInfo->m_chFlag & 0x01))
return NULL;
if (pMapCellInfo->m_xpObjectList)
{
if (pMapCellInfo->m_xpObjectList->GetCount())
{
pListNode = pMapCellInfo->m_xpObjectList->GetHead();
while (pListNode)
{
pOSObject = pMapCellInfo->m_xpObjectList->GetData(pListNode);
if (pOSObject)
{
if (pOSObject->btType == OS_EVENTOBJECT)
{
// LeaveCriticalSection(&pMapCellInfo->m_cs);
return (CEvent*)pOSObject->pObject;
}
}
pListNode = pMapCellInfo->m_xpObjectList->GetNext(pListNode);
} // while (pListNode)
} // if (pMapCellInfo->m_pObjectList.GetCount())
}
// LeaveCriticalSection(&pMapCellInfo->m_cs);
}
return NULL;
}
BOOL CMirMap::CanSafeWalk(int nX, int nY)
{
CMapCellInfo* pMapCellInfo = GetMapCellInfo(nX, nY);
_LPTOSOBJECT pOSObject;
PLISTNODE pListNode;
if (pMapCellInfo)
{
// EnterCriticalSection(&pMapCellInfo->m_cs);
if (!(pMapCellInfo->m_chFlag & 0x01))
return NULL;
if (pMapCellInfo->m_xpObjectList)
{
if (pMapCellInfo->m_xpObjectList->GetCount())
{
pListNode = pMapCellInfo->m_xpObjectList->GetHead();
while (pListNode)
{
pOSObject = pMapCellInfo->m_xpObjectList->GetData(pListNode);
if (pOSObject)
{
if (pOSObject->btType == OS_EVENTOBJECT)
{
// LeaveCriticalSection(&pMapCellInfo->m_cs);
if (((CEvent*)pOSObject->pObject)->m_nDamage > 0)
return FALSE;
}
}
pListNode = pMapCellInfo->m_xpObjectList->GetNext(pListNode);
} // while (pListNode)
} // if (pMapCellInfo->m_pObjectList.GetCount())
}
// LeaveCriticalSection(&pMapCellInfo->m_cs);
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -