bool Unit::RegisterRegion() { uint16 new_region_x = GetNewRegionX(), new_region_z = GetNewRegionZ(), old_region_x = GetRegionX(), old_region_z = GetRegionZ(); if (GetRegion() == nullptr || (old_region_x == new_region_x && old_region_z == new_region_z)) return false; AddToRegion(new_region_x, new_region_z); RemoveRegion(old_region_x - new_region_x, old_region_z - new_region_z); InsertRegion(new_region_x - old_region_x, new_region_z - old_region_z); return true; }
void CNpc::RegisterRegion() { int iRegX = 0, iRegZ = 0, old_region_x = 0, old_region_z = 0; iRegX = (int)(m_fCurX / VIEW_DISTANCE); iRegZ = (int)(m_fCurZ / VIEW_DISTANCE); if (m_sRegion_X != iRegX || m_sRegion_Z != iRegZ) { C3DMap* pMap = GetMap(); if (pMap == NULL) return; old_region_x = m_sRegion_X; old_region_z = m_sRegion_Z; pMap->RegionNpcRemove(m_sRegion_X, m_sRegion_Z, m_sNid); m_sRegion_X = iRegX; m_sRegion_Z = iRegZ; pMap->RegionNpcAdd(m_sRegion_X, m_sRegion_Z, m_sNid); RemoveRegion( old_region_x - m_sRegion_X, old_region_z - m_sRegion_Z ); // delete npc 는 계산 방향이 진행방향의 반대... InsertRegion( m_sRegion_X - old_region_x, m_sRegion_Z - old_region_z ); // add npc 는 계산 방향이 진행방향... } }