void CCollisionMap::Search(Room2 *ro, UnitAny* pPlayer, DwordArray &aSkip, DWORD dwScanArea) { if (!ro || ro->pLevel->dwLevelNo != dwScanArea || aSkip.Find((DWORD)ro) != -1 || pPlayer == NULL) return; BOOL add_room=FALSE; if(!ro->pRoom1) { add_room=TRUE; D2COMMON_AddRoomData(pPlayer->pAct, ro->pLevel->dwLevelNo, ro->dwPosX, ro->dwPosY, pPlayer->pPath->pRoom1); } aSkip.Add((DWORD)ro); aSkip.Sort(); if (ro->pRoom1) { AddCollisionData(ro->pRoom1->Coll); } Room2 **n = ro->pRoom2Near; for(UINT i=0; i < ro->dwRoomsNear; i++) { Search(n[i], pPlayer, aSkip, dwScanArea); } if(add_room) { D2COMMON_RemoveRoomData(pPlayer->pAct,ro->pLevel->dwLevelNo, ro->dwPosX, ro->dwPosY, pPlayer->pPath->pRoom1); } }
void CPathFinder::Search(RoomOther *ro, POINT ptPlayer) { if (!ro) return; if(ro->ptDrlgLevel->LevelNo != GetCurrentMapID()) return; if (m_aSearched.Find(ro) != -1) return; UnitPlayer* pPlayer = D2CLIENT_GetPlayerUnit(); if (pPlayer == NULL) return; BOOL add_room=FALSE; if(!ro->pRoom) { add_room=TRUE; D2COMMON_AddRoomData(pPlayer->ptAct, GetCurrentMapID(), ro->xPos, ro->yPos, pPlayer); } m_aSearched.Add(ro); m_aSearched.Sort(); if (ro->pRoom) AddCollisionData((LPVOID)ro->pRoom->pColl, ptPlayer); //DumpCollisionMap((LPVOID)ro->pRoom->pColl); RoomOther **n = ro->ptList; for(int i=0;i<ro->nRoomList;i++) { Search(n[i], ptPlayer); } if(add_room) { D2COMMON_RemoveRoomData(pPlayer->ptAct, GetCurrentMapID(), ro->xPos, ro->yPos, pPlayer); } }