KLingo Agent Log - 2025-11-30

Start Log

  • 20251130 11:55

작업 개요

Luggage 상호작용 시스템의 RPC 구조 개선 작업 시작

  • InteractableComponent (Pickup/Drop)
  • UHookSystem (Grappling Hook)
  • ConveyorBelt (Physics Movement)

작업 목표

  1. 멀티플레이어 환경에서 RPC 보안 강화
  2. 상태 복제로 클라이언트 간 일관성 확보
  3. 물리 시뮬레이션 품질 개선

참조 문서

  • 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)

주요 작업:

  1. InteractableComponent 보안 강화 (P0)

    • bIsPickedUp 상태 복제로 모든 클라이언트 동기화
    • Server_PickUp/Drop에 WithValidation 추가
    • 5가지 검증: 유효성, PlayerController, 중복 픽업, 기존 소유자, 거리 (1.5배 여유)
    • OnRep_IsPickedUp으로 Outline/Widget 자동 동기화
  2. Luggage 중복 훅 방지 (P1)

    • bIsBeingHooked, HookedBy 플래그 추가 및 복제
    • OnRep_IsBeingHooked으로 시각적 피드백
    • 여러 플레이어의 동시 훅 시도 차단
  3. UHookSystem 치트 방지 (P1)

    • PerformServerLineTrace 함수로 서버 기준 재검증
    • 클라이언트 HitResult 신뢰 제거
    • 5가지 검증: 라인트레이스, Hookable, 거리, 픽업 상태, 중복 훅
    • ReleaseHook에서 훅 플래그 명시적 해제
  4. 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

세부 내역:

  1. "InteractableComponent: 픽업/드롭 RPC 보안 강화"

    • bIsPickedUp 복제 추가로 클라이언트 간 상태 동기화
    • Server_PickUp/Drop에 WithValidation 추가 (거리, 소유권, 중복 검증)
    • OnRep_IsPickedUp으로 Outline/Widget 자동 동기화
  2. "Luggage: 중복 훅 방지 플래그 추가"

    • bIsBeingHooked, HookedBy 플래그 추가 및 복제
    • OnRep_IsBeingHooked으로 시각적 피드백 제공
    • 여러 플레이어의 동시 훅 시도 차단
  3. "UHookSystem: 서버 라인트레이스 재검증 및 중복 훅 방지"

    • PerformServerLineTrace 함수로 클라이언트 HitResult 재검증
    • ServerTryHook에서 거리, 픽업 상태, 중복 훅 검증 추가
    • ReleaseHook에서 훅 플래그 명시적 해제
  4. "ConveyorBelt: 서버 전용 Tick 및 Force 기반 물리 이동"

    • HasAuthority() 체크로 서버에서만 이동 처리
    • SetPhysicsLinearVelocity → AddForce 변경 (위치 스냅 제거)
    • bIsPickedUp, bIsBeingHooked 상태 확인하여 이동 무시
  5. "docs: Luggage RPC 개선 가이드 문서 작성"

    • 문제 진단, 코드 분석, 단계별 구현 가이드 포함
    • 테스트 시나리오 및 우선순위 제시 (32KB)

Next To Do

  1. 통합 테스트 수행

    • 2인 멀티플레이어 환경에서 동시 픽업/훅 시도 테스트
    • 픽업 → 컨베이어 → 드롭 체인 테스트
    • 컨베이어 → 훅 간섭 테스트
    • 거리/권한 치트 시도 테스트
  2. 물리 파라미터 튜닝 (필요 시)

    • ConveyorBelt 힘 크기 조정 (현재: MoveSpeed Mass 10.0f)
    • Luggage 질량 확인 및 최적화
  3. 디버그 로그 정리 (배포 전)

    • PRINTLOG 메시지 정리 또는 조건부 활성화
  4. 문서화 업데이트

    • Doxygen 주석 추가 (필요 시)
    • 상호작용 상태 흐름도 작성 (권한/플래그/RepNotify)

results matching ""

    No results matching ""