client: the player's own character walks through buildings and blocked cells

The server checks a move only for its distance and speed, so the local
character skips the background-object and map-attribute collision.
Other characters and doors still block it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-30 09:42:10 +09:00
co-authored by Claude Opus 5.5
parent 34c6049199
commit 20b189a9da
2 changed files with 9 additions and 0 deletions
@@ -605,6 +605,10 @@ BOOL CInstanceBase::CheckAdvancing()
} }
// 맵속성 체크 // 맵속성 체크
// PORT: nor does the player's own character stop at blocked map cells; see CPythonBackground::CheckAdvancing.
if (__IsMainInstance())
return FALSE;
CPythonBackground& rkBG=CPythonBackground::Instance(); CPythonBackground& rkBG=CPythonBackground::Instance();
const D3DXVECTOR3 & rv3Position = m_GraphicThingInstance.GetPosition(); const D3DXVECTOR3 & rv3Position = m_GraphicThingInstance.GetPosition();
const D3DXVECTOR3 & rv3MoveDirection = m_GraphicThingInstance.GetMovementVectorRef(); const D3DXVECTOR3 & rv3MoveDirection = m_GraphicThingInstance.GetMovementVectorRef();
@@ -612,6 +612,11 @@ bool CPythonBackground::CheckAdvancing(CInstanceBase * pInstance)
if (!IsMapReady()) if (!IsMapReady())
return true; return true;
// PORT: the player's own character walks through buildings and other background objects. The server
// checks a move only for its distance and speed (CInputMain::Move), so it accepts the position.
if (pInstance == CPythonCharacterManager::Instance().GetMainInstancePtr())
return false;
Vector3d center; Vector3d center;
float radius; float radius;
pInstance->GetGraphicThingInstanceRef().GetBoundingSphere(center,radius); pInstance->GetGraphicThingInstanceRef().GetBoundingSphere(center,radius);