← 목록

mLua · Nemotron-CC 리프레이즈 (CPT)

총 8,200개 · 페이지 238/274
🔀 랜덤
불러오는 중…

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `SendItemAddedEvent()` 함수의 매개변수 타입은 무엇으로 설정해야 하나요? 답변: 매개변수 타입은 **StructType - ItemStack** 으로 설정해야 합니다. 질문: `SendItemAddedEvent()` 함수에서 생성되는 이벤트 객체의 이름은 무엇인가요? 답변: 생성되는 이벤트 객체의 이름은 `SimpleInventoryItemAddedEvent` 입니다. 질문: 다음 코드 블록에서 `event.SlotIndex` 에는 어떤 값이 할당되나요? ```lua local event = Simple [original] | 4. `SendItemAddedEvent()` 함수를 생성합니다. 매개변수 타입은 **StructType - ItemStack** 으로 설정하고, 매개변수 **stack**을 추가합니다. ```lua [server only] void SendItemAddedEvent (ItemStack stack) { local event = SimpleInventoryItemAddedEvent() event.SlotIndex = stack.SlotIndex event.Ite [chunk_id] | Guides:1114:3

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템 데이터 변경하기 `SimpleInventoryItemModifiedEvent` 를 통해 서버에서 클라이언트로 아이템 변경을 동기화합니다. ## 1. 클라이언트 이벤트 수신 (`SendItemModifiedEventToClient`) 클라이언트에서 이벤트 수신 후 해당 슬롯의 `ItemStack` 데이터를 갱신합니다. ```lua [client] void SendItemModifiedEventToClient (SimpleInventoryItemModifiedEvent event) { ---@type ItemSt [original] | # 아이템 데이터 변경하기 1. `SendItemModifiedEventToClient()` 함수를 생성합니다. 매개변수 타입은 **EventType - SimpleInventoryItemModifiedEvent** 로 설정하고, 매개변수 **event**를 추가합니다. ```lua [client] void SendItemModifiedEventToClient (SimpleInventoryItemModifiedEvent event) { ---@type ItemStack l [chunk_id] | Guides:1114:4

[task] | extract_knowledge [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 인벤토리 이벤트 정의 및 아이템 추가 로직 상점 구매 시 아이템을 인벤토리에 반영하기 위해 필요한 이벤트 타입(Event Type)을 정의하고, 인벤토리의 슬롯 관리 규칙을 이해해야 합니다. ## 1. 개념: 인벤토리 슬롯 관리 규칙 인벤토리 시스템은 슬롯(Slot) 단위로 아이템을 관리합니다. * **슬롯 용량**: 각 슬롯당 최대 **10개**의 아이템을 저장할 수 있습니다. * **저장 순서**: 특정 아이템을 추가할 때, 기존에 해당 아이템이 있는 슬롯부터 용량(10개)을 채우고, 용량이 가득 차면 다음 빈 [original] | 상점에서 상품을 구매하면, 인벤토리에 담길 수 있게 만들어 봅시다. 인벤토리 슬롯 하나에는 최대 10개의 아이템을 담을 수 있습니다. 최대 수량이 찬 뒤에 다음 슬롯에 아이템을 저장하게 됩니다. 예를 들어 빨간포션을 인벤토리에 이미 5개 가지고 있을 때, 10개를 추가로 구매하면 5개가 있던 슬롯에 먼저 5개를 저장하고, 나머지 5개를 새로운 슬롯에 저장합니다. # SimpleInventoryItemAddedEvent 만들기 1. **Workspace - MyDesk - Create Scripts - Create EventTyp [chunk_id] | Guides:1114:0

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `SendItemModifiedEventToClient()` 함수는 어떤 실행 공간에서 동작하나요? 답변: 이 함수는 `[client]` 실행 공간에서 동작합니다. 질문: `SendItemModifiedEventToClient()` 함수의 매개변수 타입은 무엇인가요? 답변: 매개변수 타입은 **EventType - SimpleInventoryItemModifiedEvent** 입니다. 질문: 다음 코드가 수행하는 주요 동작은 무엇인가요? ```lua local stack = self.ItemStacks[event.Slot [original] | # 아이템 데이터 변경하기 1. `SendItemModifiedEventToClient()` 함수를 생성합니다. 매개변수 타입은 **EventType - SimpleInventoryItemModifiedEvent** 로 설정하고, 매개변수 **event**를 추가합니다. ```lua [client] void SendItemModifiedEventToClient (SimpleInventoryItemModifiedEvent event) { ---@type ItemStack l [chunk_id] | Guides:1114:4

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | - `HasSpaceFor` 메서드는 `[server only]` 실행 공간 제약이 있으며, `string` 타입의 `itemId`와 `integer` 타입의 `itemCount`를 매개변수로 받아 `boolean` 타입을 반환합니다. - 이 메서드는 `_Data.ItemTable[itemId]`를 조회하여 아이템 정보를 가져오며, `itemInfo`가 `nil`인 경우 또는 `itemCount`가 0 이하인 경우 `log_error` 함수를 호출하여 에러 메시지를 기록하고 `return`을 통해 함수를 종료합니다. - 메서드 내부 [original] | ```lua [server only] boolean HasSpaceFor (string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == nil then log_error("[SimpleInventory] (HasSpaceFor) 아이템 Id 오류: " .. itemId) return end [chunk_id] | Guides:1114:5

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 제시된 원문 문서에 포함된 정보만 기반으로 핵심 사실을 추출하여 목록으로 정리하였습니다. * **`SendItemModifiedEventToClient` 함수는 `[client]` 실행 공간에서 동작하며, 매개변수로 `SimpleInventoryItemModifiedEvent` 타입의 `event`를 수신합니다.** * **`SendItemModifiedEventToClient` 함수 내부에서는 `event`의 `SlotIndex`, `ItemId`, `ItemCount` 값을 각각 `self.ItemStacks[event [original] | # 아이템 데이터 변경하기 1. `SendItemModifiedEventToClient()` 함수를 생성합니다. 매개변수 타입은 **EventType - SimpleInventoryItemModifiedEvent** 로 설정하고, 매개변수 **event**를 추가합니다. ```lua [client] void SendItemModifiedEventToClient (SimpleInventoryItemModifiedEvent event) { ---@type ItemStack l [chunk_id] | Guides:1114:4

[task] | extract_knowledge [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 인벤토리 아이템 추가 시 클라이언트 동기화 ## 개념 설명 서버에서 플레이어의 인벤토리에 아이템이 추가되면, 해당 변경 사항을 클라이언트 화면에 반영하기 위해 이벤트 전송이 필요합니다. mLua에서는 `SimpleInventoryItemAddedEvent`를 생성하여 아이템의 슬롯 인덱스, 아이템 ID, 개수 정보를 포함해 전송합니다. 이 과정은 서버 로직(`[server only]`)에서 수행되며, 특정 플레이어에게만 해당 이벤트를 전달하도록 처리할 수 있습니다. ## API 사용법 * **`SimpleInventory [original] | 4. `SendItemAddedEvent()` 함수를 생성합니다. 매개변수 타입은 **StructType - ItemStack** 으로 설정하고, 매개변수 **stack**을 추가합니다. ```lua [server only] void SendItemAddedEvent (ItemStack stack) { local event = SimpleInventoryItemAddedEvent() event.SlotIndex = stack.SlotIndex event.Ite [chunk_id] | Guides:1114:3

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | ### `AddItem` (서버) 인벤토리에 아이템을 추가합니다. 기존 슬롯의 스택 한도(`MaxStackCount`)를 우선 채우고, 남은 개수는 빈 슬롯에 새로운 `ItemStack`을 생성하여 보관합니다. * **시그니처**: `[server only] integer AddItem(string itemId, integer itemCount)` * **동작 규칙**: 1. `_Data.ItemTable[itemId]` 조회 실패 또는 `itemCount <= 0`이면 에러 로그 후 종료. 2. **기 [original] | ```lua [server only] integer AddItem (string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == nil then log_error("[SimpleInventory] (AddItem) 아이템 Id 오류: " .. itemId) return end if item [chunk_id] | Guides:1114:2

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템 제거하기 인벤토리에서 아이템을 제거하는 로직은 서버에서 상태를 변경한 후 클라이언트에 이벤트를 전달하여 시각적 갱신을 수행하는 방식으로 구성됩니다. ## 1. 클라이언트 이벤트 처리 클라이언트는 `SimpleInventoryItemRemovedEvent`를 수신받아 해당 슬롯의 아이템을 삭제합니다. ```lua [client] void SendItemRemovedEventToClient (SimpleInventoryItemRemovedEvent event) { self.ItemStacks[event.SlotI [original] | # 아이템 제거하기 1. `SendItemRemovedEventToClient()` 함수를 추가합니다. ```lua [client] void SendItemRemovedEventToClient (SimpleInventoryItemRemovedEvent event) { self.ItemStacks[event.SlotIndex] = nil self.Entity:SendEvent(event) } ``` 2. `SendItemRemovedEven [chunk_id] | Guides:1114:6

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | **메서드: `HasSpaceFor`** * **시그니처**: `[server only] boolean HasSpaceFor(string itemId, integer itemCount)` * **기능**: 인벤토리에 지정된 아이템을 추가할 공간이 있는지 검사합니다. **동작 규칙** 1. **유효성 검사**: `itemId`가 `_Data.ItemTable`에 없거나 `itemCount`가 0 이하인 경우 `log_error`로 오류를 기록하고 `nil`(False)을 반환합니다. 2. **스택 계산**: * [original] | ```lua [server only] boolean HasSpaceFor (string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == nil then log_error("[SimpleInventory] (HasSpaceFor) 아이템 Id 오류: " .. itemId) return end [chunk_id] | Guides:1114:5

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템 데이터 변경하기 이 가이드는 서버에서 인벤토리 아이템 데이터를 수정한 후, 해당 변경 사항을 클라이언트에 동기화하는 방법을 설명합니다. 이 과정은 서버 로직이 아이템 스택(ItemStack)을 수정하고, 이를 이벤트로 변환하여 클라이언트가 수신하도록 하는 구조로 이루어져 있습니다. 먼저, 클라이언트 측에서 아이템 변경 이벤트를 수신하고 로컬 인벤토리 데이터를 갱신하기 위해 `SendItemModifiedEventToClient()` 함수를 생성해야 합니다. 이 함수는 `[client]` 실행 공간에서 동작하며, 매개변 [original] | # 아이템 데이터 변경하기 1. `SendItemModifiedEventToClient()` 함수를 생성합니다. 매개변수 타입은 **EventType - SimpleInventoryItemModifiedEvent** 로 설정하고, 매개변수 **event**를 추가합니다. ```lua [client] void SendItemModifiedEventToClient (SimpleInventoryItemModifiedEvent event) { ---@type ItemStack l [chunk_id] | Guides:1114:4

[task] | wikipedia [title] | 3. 인벤토리 데이터 저장 및 불러오기 [category] | Guides [rephrased] | # 인벤토리 데이터 저장 및 불러오기 메이플스토리 월드에서 인벤토리 데이터를 영구적으로 관리하기 위해 `DataStorageService`를 활용하는 방법은 다음과 같다. 이 과정에서 데이터 직렬화(Serialization)와 역직렬화(Deserialization) 로직을 구현하여, 서버의 데이터 스토리지에 메소(Meso)와 아이템 스택(ItemStacks) 정보를 JSON 형식으로 저장하고, 다시 로드하여 클라이언트에 반영하는 과정을 처리한다. ## SimpleInventory 컴포넌트 `SimpleInventory` 컴포넌 [original] | # 전체 스크립트 #### SimpleInventory ```lua Property: [None] integer Meso = 10000 [None] table ItemStacks = {} Method: [server only] void OnBeginPlay() { -- 데이터 스토리지에서 인벤토리 데이터를 불러옴 local userId = self.Entity.PlayerComponent.UserId local userDataStorage = _DataStorageService:GetUserDataSt [chunk_id] | Guides:1113:4

[task] | extract_knowledge [title] | 3. 인벤토리 데이터 저장 및 불러오기 [category] | Guides [rephrased] | # 인벤토리 데이터 저장 및 불러오기 본 절에서는 서버와 클라이언트 간의 인벤토리 상태 동기화 및 플레이어 퇴장 시 데이터 영속화 방법을 다룹니다. `SimpleInventoryInitializedEvent`를 통해 서버에서 클라이언트로 데이터를 전달하고, `UserService`의 `UserLeaveEvent`를 리스닝하여 `_DataStorageService`에 데이터를 저장하는 흐름을 설명합니다. ## 1. 개념 설명 메이플스토리 월드의 인벤토리 시스템은 서버와 클라이언트에서 각각 인벤토리 상태를 관리해야 합니다. 1. [original] | [server only] void SendInitializedEvent() { local event = SimpleInventoryInitializedEvent() event.Meso = self.Meso event.ItemStacks = self.ItemStacks self.Entity:SendEvent(event) -- 로컬 플레이어에게만 전달 self:SendInitializedEventToClient(event, self.Entity.PlayerComponent.UserId [chunk_id] | Guides:1113:5

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | ```lua [client] void SendItemRemovedEventToClient(SimpleInventoryItemRemovedEvent event) { self.ItemStacks[event.SlotIndex] = nil self.Entity:SendEvent(event) } ``` 1. `SendItemRemovedEventToClient` 함수는 클라이언트(`[client]`)에서 실행되며, 매개변수 `event`는 `SimpleInventoryItemRemovedEvent` 타입입니다. 2. 이 함수 [original] | # 아이템 제거하기 1. `SendItemRemovedEventToClient()` 함수를 추가합니다. ```lua [client] void SendItemRemovedEventToClient (SimpleInventoryItemRemovedEvent event) { self.ItemStacks[event.SlotIndex] = nil self.Entity:SendEvent(event) } ``` 2. `SendItemRemovedEven [chunk_id] | Guides:1114:6

[task] | extract_knowledge [title] | 3. 인벤토리 데이터 저장 및 불러오기 [category] | Guides [rephrased] | # 인벤토리 데이터 저장 및 불러오기 ## 개념 설명 mLua 환경에서는 `DataStorageService`를 통해 플레이어의 인벤토리 상태를 영구적으로 저장하고, 세션 시작 시 이를 복원하는 패턴을 사용할 수 있습니다. 이 과정은 직렬화(Serialize)와 역직렬화(Deserialize)를 통해 객체 상태를 JSON 문자열로 변환하거나, JSON 문자열로부터 객체 상태를 복원하는 방식으로 이루어집니다. 또한, 데이터 손실을 방지하기 위해 `TimerService`를 활용해 주기적으로 자동 저장을 수행할 수 있습니다. ## [original] | # 전체 스크립트 #### SimpleInventory ```lua Property: [None] integer Meso = 10000 [None] table ItemStacks = {} Method: [server only] void OnBeginPlay() { -- 데이터 스토리지에서 인벤토리 데이터를 불러옴 local userId = self.Entity.PlayerComponent.UserId local userDataStorage = _DataStorageService:GetUserDataSt [chunk_id] | Guides:1113:4

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `AddItem` 메서드가 속한 실행 공간은 어디인가요? 답변: `AddItem` 메서드는 `[server only]` 실행 공간에서 동작합니다. 질문: `AddItem` 메서드의 매개변수는 무엇이며 각각 어떤 타입인가요? 답변: 매개변수는 `itemId`(string 타입)와 `itemCount`(integer 타입)입니다. 질문: `AddItem` 메서드가 반환하는 값의 타입은 무엇인가요? 답변: `AddItem` 메서드는 `integer` 타입의 값을 반환합니다. 질문: `AddItem` 메서드에서 `itemInf [original] | ```lua [server only] integer AddItem (string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == nil then log_error("[SimpleInventory] (AddItem) 아이템 Id 오류: " .. itemId) return end if item [chunk_id] | Guides:1114:2

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템 제거하기 이 섹션에서는 인벤토리에서 아이템을 제거하는 기능을 구현하기 위한 `SendItemRemovedEventToClient()`, `SendItemRemovedEvent()`, `RemoveItemAt()` 함수의 작성 방법을 설명합니다. ### 1. 클라이언트용 이벤트 처리 함수 추가 먼저 클라이언트 측에서 아이템 제거 이벤트를 수신하여 로컬 인벤토리 상태를 동기화하는 `SendItemRemovedEventToClient()` 함수를 추가합니다. 이 함수는 `SimpleInventoryItemRemovedEv [original] | # 아이템 제거하기 1. `SendItemRemovedEventToClient()` 함수를 추가합니다. ```lua [client] void SendItemRemovedEventToClient (SimpleInventoryItemRemovedEvent event) { self.ItemStacks[event.SlotIndex] = nil self.Entity:SendEvent(event) } ``` 2. `SendItemRemovedEven [chunk_id] | Guides:1114:6

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `SendItemRemovedEventToClient()` 함수는 어떤 실행 공간에서 정의되어야 하나요? 답변: `[client]` 실행 공간에서 정의되어야 합니다. 질문: `SendItemRemovedEventToClient()` 함수 내에서 `self.ItemStacks` 테이블의 해당 슬롯 값은 어떻게 처리되나요? 답변: `event.SlotIndex`에 해당하는 인덱스의 값을 `nil`로 설정하여 제거합니다. 질문: `SendItemRemovedEvent()` 함수는 어떤 실행 공간에서 정의되며, 매개변수로 어떤 [original] | # 아이템 제거하기 1. `SendItemRemovedEventToClient()` 함수를 추가합니다. ```lua [client] void SendItemRemovedEventToClient (SimpleInventoryItemRemovedEvent event) { self.ItemStacks[event.SlotIndex] = nil self.Entity:SendEvent(event) } ``` 2. `SendItemRemovedEven [chunk_id] | Guides:1114:6

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | **[Guides] 응용 제작 가이드 > 상점과 인벤토리 > 4. 아이템을 인벤토리에 추가하기** 인벤토리에 아이템을 추가하기 전에 해당 아이템을 수용할 공간이 충분한지 확인하는 로직이 필요합니다. 아래 코드 예제는 `[server only]` 실행 공간에서 동작하는 `HasSpaceFor` 메서드를 보여주며, 인벤토리에 지정된 아이템을 지정된 개수만큼 넣을 수 있는지 여부에 따라 `boolean` 값을 반환합니다. 이 메서드는 두 개의 인자를 받습니다. 첫 번째 인자 `itemId`(`string`)는 확인하려는 아이템의 식별 [original] | ```lua [server only] boolean HasSpaceFor (string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == nil then log_error("[SimpleInventory] (HasSpaceFor) 아이템 Id 오류: " .. itemId) return end [chunk_id] | Guides:1114:5

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 상점과 인벤토리 응용 제작 가이드의 '아이템을 인벤토리에 추가하기' 단원에서 제공하는 `AddItem` 메서드와 클라이언트 이벤트 전송 로직은 서버 측에서 아이템을 인벤토리에 등록하고 해당 변경 사항을 클라이언트에 동기화하는 과정을 처리합니다. 이 과정은 서버 전용 `[server only]` 속성이 부여된 `AddItem` 메서드와 클라이언트 전용 `[client]` 속성이 부여된 `SendItemAddedEventToClient` 메서드로 구성됩니다. 서버 측 `AddItem` 메서드는 문자열 타입의 `itemId`와 정수 타 [original] | ```lua [server only] integer AddItem (string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == nil then log_error("[SimpleInventory] (AddItem) 아이템 Id 오류: " .. itemId) return end if item [chunk_id] | Guides:1114:2

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | ### `RemoveItemAt` `[server only]` ```lua boolean RemoveItemAt (integer slotIndex, integer itemCount) ``` **동작 규칙** 1. `slotIndex` (1 ~ `self.Capacity`) 및 `itemCount` (1 이상) 유효성 검사 실패 시 `false` 반환 및 에러 로그 출력. 2. 대상 슬롯에 아이템이 없거나 `stack.Count`가 `itemCount`보다 작으면 `false` 반환. 3. `stack.Count`에서 `item [original] | ```lua [server only] boolean RemoveItemAt (integer slotIndex, integer itemCount) { if slotIndex < 1 or slotIndex > self.Capacity then log_error("[SimpleInventory] (RemoveItemAt) 슬롯 인덱스 오류: " .. slotIndex) return false end if itemCount < [chunk_id] | Guides:1114:7

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 제시된 문서 내용만 기반으로 핵심 사실을 추출하여 정리했습니다. 1. `SendMesoModifiedEventToClient` 메서드는 `[client]` 실행 공간에 정의되며, `SimpleInventoryMesoModifiedEvent` 타입의 `event` 매개변수를 수신하여 `event.Meso` 값을 `self.Meso`에 대입한 뒤, `self.Entity:SendEvent(event)`를 호출해 이벤트를 전송한다. 2. `SendMesoModifiedEvent` 메서드는 `[server only]` 실행 공간에 정의되 [original] | # 메소 데이터 변경하기 1. `SendMesoModifiedEventToClient()` 함수를 추가합니다. ```lua [client] void SendMesoModifiedEventToClient (SimpleInventoryMesoModifiedEvent event) { self.Meso = event.Meso self.Entity:SendEvent(event) } ``` 2. `SendMesoModifiedEvent()` 함수를 추 [chunk_id] | Guides:1114:8

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 제시된 문서(`[Guides] 응용 제작 가이드 > 상점과 인벤토리 4. 아이템을 인벤토리에 추가하기`)에 포함된 코드 블록의 정보를 바탕으로 `RemoveItemAt` 메서드에 대한 핵심 사실을 다음과 같이 정리합니다. 1. `RemoveItemAt` 메서드는 `[server only]` 실행 공간 제약이 적용되어 서버 측에서만 실행됩니다. 2. 메서드의 반환 타입은 `boolean`이며, 인벤토리에서 아이템 제거가 성공적으로 완료되면 `true`, 실패 시 `false`를 반환합니다. 3. 메서드는 `slotIndex`(int [original] | ```lua [server only] boolean RemoveItemAt (integer slotIndex, integer itemCount) { if slotIndex < 1 or slotIndex > self.Capacity then log_error("[SimpleInventory] (RemoveItemAt) 슬롯 인덱스 오류: " .. slotIndex) return false end if itemCount < [chunk_id] | Guides:1114:7

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `RemoveItemAt` 메서드가 실행되는 공간은 어디인가요? 답변: `RemoveItemAt` 메서드는 `[server only]` 속성이 지정되어 있어 서버에서만 실행됩니다. 질문: `RemoveItemAt` 메서드의 파라미터로 `slotIndex`가 0이거나 `Capacity`보다 큰 값이 전달되면 어떻게 되나요? 답변: `slotIndex`가 1보다 작거나 `self.Capacity`보다 크면 에러 로그를 출력하고 `false`를 반환하여 처리가 중단됩니다. 질문: `itemCount`가 1보다 작을 때 `Rem [original] | ```lua [server only] boolean RemoveItemAt (integer slotIndex, integer itemCount) { if slotIndex < 1 or slotIndex > self.Capacity then log_error("[SimpleInventory] (RemoveItemAt) 슬롯 인덱스 오류: " .. slotIndex) return false end if itemCount < [chunk_id] | Guides:1114:7

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템을 인벤토리에 추가하기 ## `RemoveItemAt` 메서드 `RemoveItemAt`은 특정 슬롯에서 아이템을 제거하기 위한 서버 전용 메서드로, `[server only]` 실행 공간에서 동작합니다. 이 메서드는 두 개의 정수형 매개변수를 받으며, 첫 번째 매개변수 `slotIndex`는 대상 슬롯의 인덱스를, 두 번째 매개변수 `itemCount`는 제거할 아이템의 수량을 나타냅니다. 메서드는 먼저 입력 값의 유효성을 검증합니다. `slotIndex`가 1보다 작거나 인벤토리의 용량 `self.Capacity` [original] | ```lua [server only] boolean RemoveItemAt (integer slotIndex, integer itemCount) { if slotIndex < 1 or slotIndex > self.Capacity then log_error("[SimpleInventory] (RemoveItemAt) 슬롯 인덱스 오류: " .. slotIndex) return false end if itemCount < [chunk_id] | Guides:1114:7

[task] | extract_knowledge [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템 데이터 변경하기 ## 개념 설명 서버에서 인벤토리의 아이템 데이터(슬롯 인덱스, 아이템 ID, 개수)가 변경되면, 해당 변경 사항을 클라이언트에 전달하여 UI를 동기화해야 합니다. 이 과정은 `SimpleInventoryItemModifiedEvent` 이벤트를 통해 이루어집니다. 서버는 변경된 `ItemStack` 정보를 기반으로 이벤트를 생성하고, 해당 이벤트를 클라이언트에 전송합니다. 클라이언트는 수신된 이벤트를 처리하여 로컬 `ItemStack` 데이터를 갱신하고, 최종적으로 이벤트 소스 엔티티로 이벤트를 재전송 [original] | # 아이템 데이터 변경하기 1. `SendItemModifiedEventToClient()` 함수를 생성합니다. 매개변수 타입은 **EventType - SimpleInventoryItemModifiedEvent** 로 설정하고, 매개변수 **event**를 추가합니다. ```lua [client] void SendItemModifiedEventToClient (SimpleInventoryItemModifiedEvent event) { ---@type ItemStack l [chunk_id] | Guides:1114:4

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 메소 데이터 변경하기 메소(Meso) 값이 변경되었을 때 클라이언트로 이벤트를 전달하기 위해 서버와 클라이언트 양쪽에서 함수를 구현해야 합니다. 이 과정은 총 3단계로 구성됩니다. 먼저, 클라이언트 측에서 메소 변경 이벤트를 수신하여 로컬 상태를 업데이트하고 해당 이벤트를 엔티티에 다시 전달하는 `SendMesoModifiedEventToClient()` 함수를 추가합니다. 이 함수는 `[client]` 실행 공간에서 동작하며, `SimpleInventoryMesoModifiedEvent` 타입의 `event`를 매개변수로 [original] | # 메소 데이터 변경하기 1. `SendMesoModifiedEventToClient()` 함수를 추가합니다. ```lua [client] void SendMesoModifiedEventToClient (SimpleInventoryMesoModifiedEvent event) { self.Meso = event.Meso self.Entity:SendEvent(event) } ``` 2. `SendMesoModifiedEvent()` 함수를 추 [chunk_id] | Guides:1114:8

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 메소 데이터 변경하기 클라이언트와 서버 간 메소(Meso) 상태 동기화를 위해 이벤트 기반 메서드를 구현합니다. ## API 시그니처 및 동작 규칙 1. **`SendMesoModifiedEventToClient`** - **실행 공간**: `[client]` - **시그니처**: `void SendMesoModifiedEventToClient(SimpleInventoryMesoModifiedEvent event)` - **동작**: 이벤트의 `Meso` 값을 로컬 `self.Meso`에 할당하고, 해당 이 [original] | # 메소 데이터 변경하기 1. `SendMesoModifiedEventToClient()` 함수를 추가합니다. ```lua [client] void SendMesoModifiedEventToClient (SimpleInventoryMesoModifiedEvent event) { self.Meso = event.Meso self.Entity:SendEvent(event) } ``` 2. `SendMesoModifiedEvent()` 함수를 추 [chunk_id] | Guides:1114:8

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `HasSpaceFor` 메서드의 실행 공간은 어디인가요? 답변: 이 메서드는 `[server only]`로 지정되어 서버에서만 실행됩니다. 질문: `HasSpaceFor` 메서드가 반환하는 타입은 무엇인가요? 답변: 이 메서드는 `boolean` 타입을 반환합니다. 질문: `HasSpaceFor` 메서드의 매개변수 `itemId`와 `itemCount`의 데이터 타입은 각각 무엇인가요? 답변: `itemId`는 `string` 타입이고, `itemCount`는 `integer` 타입입니다. 질문: `HasSpaceFo [original] | ```lua [server only] boolean HasSpaceFor (string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == nil then log_error("[SimpleInventory] (HasSpaceFor) 아이템 Id 오류: " .. itemId) return end [chunk_id] | Guides:1114:5

[task] | extract_knowledge [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 4.2 인벤토리 공간 확인: `HasSpaceFor` ## 개념 설명 `HasSpaceFor` 메서드는 특정 아이템(`itemId`)을 주어진 수량(`itemCount`)만큼 인벤토리에 추가할 수 있는지가 있는지 판별하는 로직입니다. 이 판별 과정은 다음 두 가지 조건을 모두 만족하는지 확인합니다. 1. **빈 슬롯**: 비어 있는 슬롯(`nil`)에서 최대 스택 수(`MaxStackCount`)만큼을 차감할 수 있는지. 2. **기존 스택**: 이미 해당 아이템이 존재하는 슬롯에서 남은 스택 공간(`MaxStackCount [original] | ```lua [server only] boolean HasSpaceFor (string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == nil then log_error("[SimpleInventory] (HasSpaceFor) 아이템 Id 오류: " .. itemId) return end [chunk_id] | Guides:1114:5

← → 방향키로 페이지 이동 · 숫자 입력 후 Enter로 점프