Skip to main content

개요

CharacterModules.CharacterInfo.Component.InventoryInfo.ItemInfo.Database.

  • 일반 슬롯(ItemSlot)에 배치되는 아이템 정의를 단일 모듈에서 선언한다.
  • 런타임 초기화 시점에 ItemInfos 레지스트리에 모든 아이템 메타데이터를 등록한다.
  • 데이터와 등록 절차를 분리해 테스트와 런타임에서 동일한 아이템 구성을 재사용한다.
  • 인벤토리 속성(Attribute)과 래퍼를 통해 아이템 상태를 안전하게 읽고 쓴다.

책임

  • 아이템 메타데이터 스키마를 표준화하고 타입 검증 절차를 제공한다.
  • 등록 순서에 따라 아이템 고유 식별자를 부여해 의도치 않은 충돌을 방지한다.
  • 래퍼 계층을 통해 속성 접근을 추상화하고 UI 또는 시스템 단위에서 일관된 인터페이스를 보장한다.

레지스트리 흐름

TempRegistry

CharacterModules.CharacterInfo.Component.InventoryInfo.ItemInfo.TempRegistry.

  • ItemInfoParams를 받아 즉시 생성하지 않고 임시 저장소에 보관한다.
  • 파라미터의 필수 필드와 허용된 값 범위를 검증한다.
  • 잘못된 인자가 포함되면 상황에 맞는 에러를 발생시켜 초기화 단계에서 조기 실패한다.

Database 초기화

  • 게임 시작 시점에 TempRegistry에 쌓인 정의를 순회한다.
  • 순회 순서대로 Id를 할당하고 ItemInfo 인스턴스를 생성한다.
  • 생성한 인스턴스를 ItemInfos 맵에 등록하고, 키는 네임스페이스 규칙을 따르는 문자열을 사용한다.
  • 최종 등록이 완료되면 TempRegistry는 비워 안전한 재초기화를 보장한다.

ItemInfo 구조

필수 필드

  • Id: number. 레지스트리 순서로 할당되는 고유 식별자다.
  • DisplayName: string. UI 표기를 위한 지역화 키이며 LocalizationTable에서 해석한다.
  • DescriptionKey: string. 상세 설명용 지역화 키다. 기본값은 빈 문자열 키("")다.
  • MaxStack: number. 슬롯 내 최대 수량이다. 0이면 무한을 의미한다.

선택 필드

  • IconImage: string?. 이미지 애셋 식별자다. 지정하지 않으면 기본 아이콘을 사용한다.
  • DefaultAttributes: {[string]: AttributeValue}?. 아이템 래퍼 초기화 시 적용할 기본 속성 값 집합이다.
  • Metadata: {[string]: any}. 개별 아이템 전용 확장 정보를 보관한다, Attribute 로 저장할 땐 Messagepack 을 이용해 저장한다

속성 관리

  • 인벤토리 슬롯 인스턴스는 Roblox Attribute를 이용해 런타임 상태를 저장한다.
  • ItemInfo는 Attributes 키 네이밍 규칙을 정의하고 타입을 강제한다.
  • 필수 속성은 래퍼 초기화에서 SetAttribute를 통해 보장한다.

래퍼 계층

  • InventoryItemWrapperItemInfo와 인벤토리 서버 객체를 묶는다.
  • GetProperty(name: string)은 내부 속성 테이블과 Attribute를 조회해 일관된 값을 반환한다.
  • SetProperty(name: string, value: any)는 유효성 검사를 통과한 값만 Attributes와 내부 캐시에 적용한다.
  • 래퍼는 메타데이터를 참조 가능하나 직접 변경하지 않으며, 상태 변경은 전부 속성을 통해 수행한다.

레지스트리 사용 규칙

  • 모든 아이템은 TempRegistry.Registry(params)를 통해 등록한다.
  • params.Name은 전역 네임스페이스 규칙을 따르는 문자열이어야 한다.
  • 같은 이름의 아이템은 두 번 이상 등록할 수 없다.
  • 테스트 환경에서는 동일한 초기화 함수를 호출해 프로덕션과 같은 구성을 확보한다.