KLingo Agent Log - 2025-11-30
Start Log
- 20251130 11:55
작업 개요
Luggage 상호작용 시스템의 RPC 구조 개선 작업 시작
- InteractableComponent (Pickup/Drop)
- UHookSystem (Grappling Hook)
- ConveyorBelt (Physics Movement)
작업 목표
- 멀티플레이어 환경에서 RPC 보안 강화
- 상태 복제로 클라이언트 간 일관성 확보
- 물리 시뮬레이션 품질 개선
참조 문서
Documents/DevLog/AgentLog/KLingo_Luggage.md(진단 리포트)Documents/DevLog/AgentLog/KLingo_Luggage_RPC_Guide.md(개선 가이드)
Compact Log 1
- 20251130 12:36
요약 내용
Luggage 상호작용 RPC 시스템 전면 개선 완료. 클라이언트 신뢰 문제, 상태 불일치, 중복 소유권 문제를 해결하여 멀티플레이어 환경에서의 안정성과 보안을 대폭 강화함.
변경 파일:
InteractableComponent.h: bIsPickedUp 복제 추가, WithValidation 선언InteractableComponent.cpp: OnRep_IsPickedUp, Server_PickUp/Drop Validation 구현luggage.h: bIsBeingHooked, HookedBy 훅 플래그 추가luggage.cpp: OnRep_IsBeingHooked 구현, 복제 설정UHookSystem.h: PerformServerLineTrace 함수 선언UHookSystem.cpp: 서버 라인트레이스 재실행, 중복 훅 방지, 훅 플래그 해제 로직 추가ConveyorBelt.cpp: Tick 서버 전용화, Force 기반 이동으로 변경, Hook 중 이동 무시 추가KLingo_Luggage_RPC_Guide.md: 상세 개선 가이드 문서 작성 (32KB)
주요 작업:
InteractableComponent 보안 강화 (P0)
- bIsPickedUp 상태 복제로 모든 클라이언트 동기화
- Server_PickUp/Drop에 WithValidation 추가
- 5가지 검증: 유효성, PlayerController, 중복 픽업, 기존 소유자, 거리 (1.5배 여유)
- OnRep_IsPickedUp으로 Outline/Widget 자동 동기화
Luggage 중복 훅 방지 (P1)
- bIsBeingHooked, HookedBy 플래그 추가 및 복제
- OnRep_IsBeingHooked으로 시각적 피드백
- 여러 플레이어의 동시 훅 시도 차단
UHookSystem 치트 방지 (P1)
- PerformServerLineTrace 함수로 서버 기준 재검증
- 클라이언트 HitResult 신뢰 제거
- 5가지 검증: 라인트레이스, Hookable, 거리, 픽업 상태, 중복 훅
- ReleaseHook에서 훅 플래그 명시적 해제
ConveyorBelt 물리 개선 (P2)
- HasAuthority() 체크로 서버 전용 Tick
- SetPhysicsLinearVelocity → AddForce 기반 이동
- 질량 기반 힘 적용 (MoveSpeed Mass 10.0f)
- bIsPickedUp, bIsBeingHooked 상태 확인하여 이동 무시
문제 해결 요약:
- ❌ 클라이언트가 임의의 액터를 소유자로 지정 가능 → ✅ 서버 Validation으로 차단
- ❌ 거리 밖 오브젝트 픽업/훅 가능 → ✅ 서버 기준 거리 재검증
- ❌ 여러 플레이어가 같은 Luggage 동시 소유 → ✅ 중복 소유권 방지
- ❌ bIsPickedUp 미복제로 시스템 간 상태 불일치 → ✅ 복제 및 RepNotify 동기화
- ❌ 물리 속도 덮어쓰기로 위치 스냅 발생 → ✅ Force 기반 자연스러운 이동
- ❌ 클라이언트/서버 모두 물리 이동 처리 → ✅ 서버 전용 처리로 충돌 제거
Commit 정보
Summary (EN): fix: secure RPC for Luggage interactions with validation, replication, and physics improvements
세부 내역:
"InteractableComponent: 픽업/드롭 RPC 보안 강화"
- bIsPickedUp 복제 추가로 클라이언트 간 상태 동기화
- Server_PickUp/Drop에 WithValidation 추가 (거리, 소유권, 중복 검증)
- OnRep_IsPickedUp으로 Outline/Widget 자동 동기화
"Luggage: 중복 훅 방지 플래그 추가"
- bIsBeingHooked, HookedBy 플래그 추가 및 복제
- OnRep_IsBeingHooked으로 시각적 피드백 제공
- 여러 플레이어의 동시 훅 시도 차단
"UHookSystem: 서버 라인트레이스 재검증 및 중복 훅 방지"
- PerformServerLineTrace 함수로 클라이언트 HitResult 재검증
- ServerTryHook에서 거리, 픽업 상태, 중복 훅 검증 추가
- ReleaseHook에서 훅 플래그 명시적 해제
"ConveyorBelt: 서버 전용 Tick 및 Force 기반 물리 이동"
- HasAuthority() 체크로 서버에서만 이동 처리
- SetPhysicsLinearVelocity → AddForce 변경 (위치 스냅 제거)
- bIsPickedUp, bIsBeingHooked 상태 확인하여 이동 무시
"docs: Luggage RPC 개선 가이드 문서 작성"
- 문제 진단, 코드 분석, 단계별 구현 가이드 포함
- 테스트 시나리오 및 우선순위 제시 (32KB)
Next To Do
통합 테스트 수행
- 2인 멀티플레이어 환경에서 동시 픽업/훅 시도 테스트
- 픽업 → 컨베이어 → 드롭 체인 테스트
- 컨베이어 → 훅 간섭 테스트
- 거리/권한 치트 시도 테스트
물리 파라미터 튜닝 (필요 시)
- ConveyorBelt 힘 크기 조정 (현재: MoveSpeed Mass 10.0f)
- Luggage 질량 확인 및 최적화
디버그 로그 정리 (배포 전)
- PRINTLOG 메시지 정리 또는 조건부 활성화
문서화 업데이트
- Doxygen 주석 추가 (필요 시)
- 상호작용 상태 흐름도 작성 (권한/플래그/RepNotify)