게임플레이는 월드(MapleWorld) 단위로 구성되며, 플레이어/몹/스킬/아이템 시스템이 패킷과 이벤트 버스로 연결됩니다.
MapleWorld: 월드 내 엔티티(플레이어, 아이템) 관리Portal: 플레이어 충돌/상호작용 기반 월드 전이MapleServer::MoveUserToWorld: 서버 권한 월드 이동 처리
- 플레이어가 포털 콜라이더 안으로 진입합니다.
- 입력(
bUp)이 들어오면EntityRouter가TryTransferByPortal을 호출해 이동 할 수 있는지 검증합니다. - 서버가 사용자 상태/쿨다운 검증 후 대상 월드로 이동시킵니다.
- 기존 월드에서 Despawn, 대상 월드에서 Spawn을 수행합니다.
Note
월드 이동 후 윗 방향키가 눌린 상태라 바로 이전 월드로 가지는 것을 막기 위해 포탈 이용 쿨타임을 뒀습니다.
- 이동: Foothold 기반 물리 처리 + 예측/재조정
- 입력 잠금/해제:
PlayerMovement::LockInput,UnlockInput - 네임태그:
PlayerSpawnPacket의 닉네임으로 초기화 - 카메라: 로컬 플레이어 스폰 시 카메라 타겟 연결
AIStrategy인터페이스 +BasicAI구현(FSM)- 기본 상태: Idle, Move, Chase (Attack/Dead 확장 가능)
- 서버에서만 AI를 실행하고 상태를 네트워크로 전파합니다.
MobSpawner가 스폰 큐를 관리합니다.- 사망 이벤트 수신 시 큐에 복귀시키고 지연 후 재스폰합니다.
- 월드 신규 진입 유저에게 현재 활성 몹 목록을 재전송합니다.
- 투사체 히트박스 충돌 시 데미지/기절/넉백을 서버에서 처리합니다.
MobStatePacket을 주기적으로 브로드캐스트하며, 피격 시 즉시 추가 전송합니다.
- 입력 감지 시
SkillUsingPacket전송 - 로컬에서 즉시 스킬 애니메이션을 시작해 체감 지연을 줄임
- 시퀀스 중복 방지(
lastSeq) - 틱 오프셋을 계산해 스킬 적용 시점을 예약
- 쿨다운/상태를 권한적으로 관리하고 결과를 전파
- 몹 사망 시
ItemDropManager확률 테이블로 드롭 결정 - 서버
MapleWorld가 아이템 오브젝트 생성 후ItemDropPacket전송 - 클라이언트는 아이템 정보 DB(
ItemDB)를 참고하여 텍스처를 로드 후 표시 - 획득/삭제 시
ItemDespawnPacket으로 동기화
- 슬롯 이동/스왑/스택 합치기 지원
- 변경 슬롯만 추적(
dirtySlots)하여 부분 동기화 - 서버가 변경 결과를
InventorySyncPacket으로 전달