← 목록

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

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

[task] | extract_knowledge [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템 제거하기 인벤토리에서 특정 슬롯의 아이템을 제거하는 로직은 서버와 클라이언트 간의 상태 동기화를 위해 분리되어 구현됩니다. 서버는 아이템 수량 변경과 이벤트 생성을 담당하며, 클라이언트는 해당 이벤트를 수신하여 로컬 인벤토리 상태를 갱신합니다. ## 개념 설명 1. **서버 측 처리 (`SendItemRemovedEvent`)**: * `ItemStack` 타입의 매개변수를 받아 `SimpleInventoryItemRemovedEvent` 객체를 생성합니다. * 이벤트 객체에 `SlotInde [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] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 인벤토리에 아이템 추가하기 ## 개념 설명 인벤토리에 아이템을 추가하는 로직은 서버에서 처리되어야 하며, 기존에 존재하는 같은 종류의 아이템 스택을 채우고, 남은 개수가 있다면 빈 슬롯에 새로운 스택을 생성하는 순서로 진행됩니다. 이 과정은 아이템의 최대 적재 수(`MaxStackCount`)를 준수하며, 인벤토리의 용량(`Capacity`)을 초과하는 경우 처리되지 못한 개수를 반환합니다. 서버에서 처리가 완료된 후, 클라이언트는 이벤트 수신 시 인벤토리 데이터를 업데이트하고 해당 이벤트를 엔티티에 전송하여 UI 갱신을 유도 [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] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `SendMesoModifiedEventToClient()` 함수는 어떤 실행 공간에서 정의됩니까? 답변: `SendMesoModifiedEventToClient()` 함수는 `[client]` 실행 공간에서 정의됩니다. 질문: `SendMesoModifiedEventToClient()` 함수에서 수신한 이벤트의 `Meso` 값을 어디에 저장합니까? 답변: 수신한 이벤트의 `Meso` 값을 `self.Meso` 프로퍼티에 저장합니다. 질문: `SendMesoModifiedEventToClient()` 함수에서 이벤트를 어 [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] | extract_knowledge [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 메소 데이터 변경하기 ## 개념 설명 서버와 클라이언트 간의 메소(Meso) 데이터 동기화는 서버 측에서 값이 변경될 때 특정 이벤트를 발생시키고, 클라이언트가 해당 이벤트를 수신하여 로컬 상태를 업데이트하는 방식으로 이루어집니다. 이 과정은 `SimpleInventoryMesoModifiedEvent` 객체를 매개변수로 사용하여 이루어집니다. ## API 사용법 메소 데이터 변경 및 동기화를 위해 다음 메서드들을 컴포넌트에 구현해야 합니다. 1. **`SendMesoModifiedEventToClient`**: 클라이언 [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] | extract_knowledge [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 4. 아이템을 인벤토리에 추가하기 ## 개념 설명 `RemoveItemAt` 메서드는 지정된 슬롯 인덱스에서 특정 수량의 아이템을 제거하는 서버 전용 로직입니다. 이 메서드는 슬롯의 유효성, 요청된 아이템 수량, 그리고 현재 스택의 잔여 개수를 검증한 후 아이템 개수를 감소시킵니다. 아이템 개수가 0이 되면 해당 슬롯의 스택을 제거하고 삭제 이벤트를 발생시키며, 0보다 크면 수정된 스택 정보를 클라이언트에 전달합니다. ## API 사용법 - **메서드 시그니처**: `boolean RemoveItemAt (integer sl [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. `AddItem` 메서드는 `[server only]` 실행 공간에서 동작하며, 매개변수로 `string` 타입의 `itemId`와 `integer` 타입의 `itemCount`를 받아 `integer` 타입의 값을 반환한다. 2. `AddItem` 메서드에서 `_Data.ItemTable[itemId]`를 조회한 결과가 `nil`인 경우, `log_error`로 에러를 기록하고 함수를 즉시 종료한다. 3. `AddItem` 메서드에서 `itemCou [original] | [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 itemCount <= 0 then log_error("[SimpleInventory] ( [chunk_id] | Guides:1114:10

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | ```lua -- [server only] RemoveItemAt(integer slotIndex, integer itemCount): boolean -- 슬롯 인덱스(slotIndex)와 아이템 개수(itemCount)를 매개변수로 받아 해당 슬롯의 아이템을 제거하고 성공 여부에 따라 true 또는 false를 반환합니다. -- 실행 시 서버만 허용되며, 슬롯 범위(1 ~ self.Capacity) 및 아이템 존재 여부, 개수 부족 여부를 검증하여 오류 시 log_error를 출력하고 false를 반환합니다. -- 아이템 개수가 [original] | if stack == nil then remain = remain - maxStackCount elseif stack.ItemId == itemId then remain = remain - math.min(maxStackCount - stack.Count, remain) end end return (remain <= 0) } [server only] boolean RemoveItemAt (integer slotIndex, integer itemCount) { if sl [chunk_id] | Guides:1114:11

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | **인벤토리 데이터 관리 (세리얼라이즈/디세리얼라이즈)** **속성 (Property)** * `integer Meso`: 보유 메소 * `table ItemStacks`: 슬롯 인덱스를 키로 하는 아이템 스택 테이블 * `integer Capacity`: 인벤토리 최대 슬롯 수 (기본 16) **메서드 (Method)** 1. **`string Serialize()`** * 현재 `Meso`와 `ItemStacks`를 테이블로 구성하여 JSON 문자열로 인코딩하여 반환합니다. * `ItemS [original] | ```lua Property: [None] integer Meso = 10000 [None] table ItemStacks = {} [None] integer Capacity = 16 Method: [server only] void OnBeginPlay() { -- 데이터 스토리지에서 인벤토리 데이터를 불러옴 local userId = self.Entity.PlayerComponent.UserId local userDataStorage = _DataStorageService:GetUserDataStor [chunk_id] | Guides:1114:9

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | ### 4. 아이템을 인벤토리에 추가하기: 사용자 이탈 시 데이터 저장 **이벤트 핸들러**: `HandleUserLeaveEvent` **서비스**: `[service: UserService]` **실행 공간**: Server **동작 규칙** 1. 이벤트의 `UserId`와 현재 엔티티의 `self.Entity.PlayerComponent.UserId`가 일치하는지 확인합니다. 2. 일치할 경우 `_DataStorageService`를 통해 해당 사용자의 데이터 스토리지 객체를 가져옵니다. 3. `self:Serialize( [original] | Entity Event Handler: [service: UserService] HandleUserLeaveEvent (UserLeaveEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: UserService -- Space: Server --------------------------------------------------------- -- Parameters local User [chunk_id] | Guides:1114:13

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | * 스크립트 컴포넌트의 `Meso` 속성은 `[None]` 동기화 속성으로 정의되며, 기본값은 10000인 `integer` 타입입니다. * 스크립트 컴포넌트의 `ItemStacks` 속성은 `[None]` 동기화 속성으로 정의되며, 기본값은 빈 테이블 `{}`인 `table` 타입입니다. * 스크립트 컴포넌트의 `Capacity` 속성은 `[None]` 동기화 속성으로 정의되며, 기본값은 16인 `integer` 타입입니다. * `OnBeginPlay()` 메서드는 `[server only]` 실행 공간에서 동작하며 [original] | ```lua Property: [None] integer Meso = 10000 [None] table ItemStacks = {} [None] integer Capacity = 16 Method: [server only] void OnBeginPlay() { -- 데이터 스토리지에서 인벤토리 데이터를 불러옴 local userId = self.Entity.PlayerComponent.UserId local userDataStorage = _DataStorageService:GetUserDataStor [chunk_id] | Guides:1114:9

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | ## 4. 아이템을 인벤토리에 추가하기 인벤토리에 아이템을 추가하거나 남은 공간을 확인하는 서버 전용 메서드입니다. ### `AddItem` 기존 슬롯의 스택 한도(`MaxStackCount`)를 우선 채우고, 남은 개수는 빈 슬롯에 새로운 `ItemStack`을 생성하여 배치합니다. ```lua [server only] integer AddItem(string itemId, integer itemCount) { local itemInfo = _Data.ItemTable[itemId] if itemInfo == [original] | [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 itemCount <= 0 then log_error("[SimpleInventory] ( [chunk_id] | Guides:1114:10

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `Property: [None]` 블록에서 선언된 `Meso` 변수의 초기 값은 얼마이며, 이 변수의 데이터 타입은 무엇인가요? 답변: `Meso` 변수의 초기 값은 10000이고, 데이터 타입은 `integer`입니다. 질문: `Capacity` 프로퍼티의 값이 16인 경우, 이는 인벤토리의 어떤 속성을 의미한다고 추측할 수 있나요? 답변: 문서에 명시된 정확한 정의는 없으나, 변수 이름과 값(16)을 근거로 인벤토리의 슬롯 용량 또는 최대 수용 가능 아이템 수를 의미하는 것으로 볼 수 있습니다. 질문: `OnBegin [original] | ```lua Property: [None] integer Meso = 10000 [None] table ItemStacks = {} [None] integer Capacity = 16 Method: [server only] void OnBeginPlay() { -- 데이터 스토리지에서 인벤토리 데이터를 불러옴 local userId = self.Entity.PlayerComponent.UserId local userDataStorage = _DataStorageService:GetUserDataStor [chunk_id] | Guides:1114:9

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `RemoveItemAt` 메서드에서 `slotIndex`가 유효하지 않을 때(1보다 작거나 `self.Capacity`보다 클 때) 어떤 처리가 이루어지나요? 답변: `log_error` 함수를 통해 "[SimpleInventory] (RemoveItemAt) 슬롯 인덱스 오류: " 뒤에 해당 인덱스 값을 연결한 로그를 출력하고, 메서드는 `false`를 반환합니다. 질문: `RemoveItemAt` 메서드가 성공적으로 실행되어 아이템 개수가 0이 되었을 때, 인벤토리 구조와 이벤트 전송 측면에서 어떤 변화가 발생하나요? [original] | if stack == nil then remain = remain - maxStackCount elseif stack.ItemId == itemId then remain = remain - math.min(maxStackCount - stack.Count, remain) end end return (remain <= 0) } [server only] boolean RemoveItemAt (integer slotIndex, integer itemCount) { if sl [chunk_id] | Guides:1114:11

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 제공된 문서(코드 스니펫)에 포함된 핵심 사실을 추출하여 목록으로 정리합니다. 1. `HandleUserLeaveEvent`는 `UserService` 서비스의 `UserLeaveEvent`를 처리하는 이벤트 핸들러이며, 실행 공간은 서버(Server)입니다. 2. 이벤트 매개변수 `event`는 `UserLeaveEvent` 타입이며, 이로부터 `UserId` 값을 추출하여 사용합니다. 3. `self.Entity.PlayerComponent.UserId`를 통해 현재 엔티티에 연결된 플레이어의 `UserId`를 조회합니다. 4 [original] | Entity Event Handler: [service: UserService] HandleUserLeaveEvent (UserLeaveEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: UserService -- Space: Server --------------------------------------------------------- -- Parameters local User [chunk_id] | Guides:1114:13

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | **아이템을 인벤토리에 추가하기** 플레이어가 게임을 종료할 때 인벤토리 데이터를 영구 저장하기 위해, `UserService` 서비스의 `UserLeaveEvent` 이벤트 핸들러를 구현해야 합니다. 이 이벤트는 서버 공간(Server Space)에서 트리거되며, 이벤트 객체를 통해 이탈한 사용자의 `UserId`를 제공합니다. 다음 코드는 플레이어가 장비를 벗거나 게임을 나갈 때(`HandleUserLeaveEvent`) 실행되는 예제입니다. ```lua Entity Event Handler: [service: UserSe [original] | Entity Event Handler: [service: UserService] HandleUserLeaveEvent (UserLeaveEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: UserService -- Space: Server --------------------------------------------------------- -- Parameters local User [chunk_id] | Guides:1114:13

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # [SimpleInventory] 아이템 추가 및 관리 로직 `SimpleInventory` 컴포넌트는 서버에서 아이템 상태를 관리하고, 변경 시 클라이언트에 이벤트를 전송하는 역할을 합니다. ## 핵심 메서드 ### `CanAddItem` 지정된 아이템을 인벤토리에 추가할 수 있는지 확인합니다. - **동작**: 기존 스택의 `Count`와 `maxStackCount`를 비교하여 남은 공간(`remain`)을 계산합니다. - **반환**: 추가 가능 여부 (`boolean`) ```lua if stack == nil th [original] | if stack == nil then remain = remain - maxStackCount elseif stack.ItemId == itemId then remain = remain - math.min(maxStackCount - stack.Count, remain) end end return (remain <= 0) } [server only] boolean RemoveItemAt (integer slotIndex, integer itemCount) { if sl [chunk_id] | Guides:1114:11

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `AddItem` 메서드의 실행 공간은 어디인가요? 답변: `AddItem` 메서드는 서버에서만 실행되는 `[server only]` 공간에서 동작합니다. 질문: `AddItem` 메서드의 파라미터 `itemId`와 `itemCount`의 타입은 무엇인가요? 답변: `itemId`는 `string` 타입, `itemCount`는 `integer` 타입입니다. 질문: `AddItem` 메서드에서 `itemInfo`가 `nil`인 경우 어떻게 처리되나요? 답변: `log_error` 함수를 통해 "[SimpleInventor [original] | [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 itemCount <= 0 then log_error("[SimpleInventory] ( [chunk_id] | Guides:1114:10

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | ### 인벤토리 이벤트 인벤토리 상태 변경 시 발생하는 이벤트의 프로퍼티 구성입니다. #### SimpleInventoryItemAddedEvent 아이템 추가 시 발생. ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemModifiedEvent 아이템 변경 시 발생. ```lua Property: integer SlotIndex = 0 string ItemId = "" intege [original] | #### SimpleInventoryItemAddedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemModifiedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemRemovedEvent ```lua Property: [chunk_id] | Guides:1114:14

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | SimpleInventoryItemAddedEvent 는 SlotIndex(integer), ItemId(string), ItemCount(integer) 속성을 가지며, 인벤토리에 아이템이 추가되었음을 알리는 이벤트입니다. SimpleInventoryItemModifiedEvent 는 SlotIndex(integer), ItemId(string), ItemCount(integer) 속성을 가지며, 인벤토리의 아이템 수량이 수정되었음을 알리는 이벤트입니다. SimpleInventoryItemRemovedEvent 는 SlotIn [original] | #### SimpleInventoryItemAddedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemModifiedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemRemovedEvent ```lua Property: [chunk_id] | Guides:1114:14

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: 제시된 코드의 `HandleUserLeaveEvent` 이벤트 핸들러는 어떤 서비스를 구독하고 있나요? 답변: 이 이벤트 핸들러는 `UserService` 서비스를 구독합니다. 질문: `HandleUserLeaveEvent` 내부에서 `thisUserId`와 `event.UserId`가 일치하지 않을 때 코드는 어떻게 동작하나요? 답변: 두 값이 일치하지 않으면(`~=`) 함수가 즉시 종료되어(`return`) 이후의 저장 로직은 수행되지 않습니다. 질문: 플레이를 끝낼 때 인벤토리 데이터 정보를 저장하기 위해 어떤 서비 [original] | Entity Event Handler: [service: UserService] HandleUserLeaveEvent (UserLeaveEvent event) { --------------- Native Event Sender Info ---------------- -- Sender: UserService -- Space: Server --------------------------------------------------------- -- Parameters local User [chunk_id] | Guides:1114:13

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `SendItemAddedEventToClient` 메서드는 어떤 실행 공간에서 동작합니까? 답변: `SendItemAddedEventToClient` 메서드는 클라이언트(`[client]`)에서 동작합니다. 질문: `SendItemAddedEventToClient`에서 새로운 `ItemStack` 객체를 생성한 후 어떤 필드들을 설정합니까? 답변: `SlotIndex`, `ItemId`, `Count` 필드를 이벤트 객체의 해당 값으로 설정합니다. 질문: `SendItemAddedEventToClient`에서 아이템을 [original] | [client] void SendItemAddedEventToClient (SimpleInventoryItemAddedEvent event) { local stack = ItemStack() stack.SlotIndex = event.SlotIndex stack.ItemId = event.ItemId stack.Count = event.ItemCount self.ItemStacks[event.SlotIndex] = stack self.Entity:SendEvent(event) } [chunk_id] | Guides:1114:12

[task] | distill [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | **인벤토리 상태 동기화 이벤트 처리** 서버에서 인벤토리 변경(추가, 수정, 제거, 메소 변경) 시 이벤트를 생성해 클라이언트로 전달하고, 클라이언트는 해당 이벤트를 수신하여 로컬 `ItemStacks` 테이블 또는 `Meso` 프로퍼티를 갱신합니다. **핵심 동작 규칙** * **이벤트 생성:** 서버(`[server only]`)에서 `SimpleInventoryItemAddedEvent`, `SimpleInventoryItemModifiedEvent`, `SimpleInventoryItemRemovedEvent`, ` [original] | [client] void SendItemAddedEventToClient (SimpleInventoryItemAddedEvent event) { local stack = ItemStack() stack.SlotIndex = event.SlotIndex stack.ItemId = event.ItemId stack.Count = event.ItemCount self.ItemStacks[event.SlotIndex] = stack self.Entity:SendEvent(event) } [chunk_id] | Guides:1114:12

[task] | knowledge_list [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 1. `SendItemAddedEventToClient`는 `[client]` 실행 공간에서 동작하며, 매개변수로 `SimpleInventoryItemAddedEvent` 타입의 `event`를 받아 `event.SlotIndex`, `event.ItemId`, `event.ItemCount` 값을 추출하여 새로운 `ItemStack` 객체를 생성하고 해당 슬롯 인덱스를 키로 `self.ItemStacks` 테이블에 저장한 뒤, `self.Entity:SendEvent(event)`를 호출하여 이벤트를 전파합니다. 2. `Send [original] | [client] void SendItemAddedEventToClient (SimpleInventoryItemAddedEvent event) { local stack = ItemStack() stack.SlotIndex = event.SlotIndex stack.ItemId = event.ItemId stack.Count = event.ItemCount self.ItemStacks[event.SlotIndex] = stack self.Entity:SendEvent(event) } [chunk_id] | Guides:1114:12

[task] | distill [title] | 8. 상점 로직 만들기Ⅰ [category] | Guides [rephrased] | `Sell()` 함수는 지정된 인벤토리 슬롯의 아이템을 판매하여 메소를 획득합니다. 판매 가격은 구매 가격(`ItemInfo.Price`)의 절반으로 계산되며, 유효성 검사가 실패하면 오류를 기록하고 즉시 종료됩니다. ```lua [server] void Sell (integer inventorySlotIndex integer itemCount) { local customerUserId = senderUserId local user = _UserService:GetUserEntityByUserId(customerUs [original] | 3. `Sell()` 함수를 추가하고 매개변수 **inventorySlotIndex, itemCount**를 추가합니다. inventorySlotIndex에 있는 인벤토리 아이템을 itemCount만큼 판매하고 메소를 획득하도록 작성합니다. 이때 판매 가격은 구매 가격의 절반이 되도록 함께 작성합니다. ```lua [server] void Sell (integer inventorySlotIndex integer itemCount) { -- inventorySlotIndex에 있는 인벤토리 [chunk_id] | Guides:1115:1

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | **SimpleInventoryItemAddedEvent** `SimpleInventoryItemAddedEvent`는 인벤토리에 아이템이 추가되었을 때 발생하는 이벤트입니다. 이 이벤트는 다음 세 가지 프로퍼티를 포함합니다. `SlotIndex`는 추가된 아이템이 저장된 슬롯 인덱스를 나타내는 정수(`integer`)형 값이며, 기본값은 0입니다. `ItemId`는 추가된 아이템의 고유 식별자를 나타내는 문자열(`string`)형 값이며, 기본값은 빈 문자열입니다. `ItemCount`는 추가된 아이템의 수량을 나타내는 정수(` [original] | #### SimpleInventoryItemAddedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemModifiedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemRemovedEvent ```lua Property: [chunk_id] | Guides:1114:14

[task] | diverse_qa [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | 질문: `SimpleInventoryItemAddedEvent` 이벤트에서 아이템이 추가된 슬롯 번호를 확인하기 위해 사용해야 하는 프로퍼티 이름은 무엇인가요? 답변: `SlotIndex` 프로퍼티를 사용합니다. 질문: `SimpleInventoryItemModifiedEvent`와 `SimpleInventoryItemRemovedEvent`는 어떤 공통된 프로퍼티를 가지고 있나요? 답변: 두 이벤트 모두 `SlotIndex` (integer)와 `ItemId` (string) 프로퍼티를 공통적으로 가지고 있습니다. 질문: 다음 [original] | #### SimpleInventoryItemAddedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemModifiedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemRemovedEvent ```lua Property: [chunk_id] | Guides:1114:14

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템을 인벤토리에 추가하기 메이플스토리 월드의 `SimpleInventory` 컴포넌트는 서버 측(`[server only]`)에서 실행되는 `AddItem` 메서드를 통해 인벤토리에 아이템을 추가하는 기능을 제공합니다. 이 메서드는 아이템의 스택 제한(`MaxStackCount`)을 준수하며, 기존에 같은 아이템이 저장된 슬롯부터 우선적으로 채운 후, 남은 개수가 있다면 빈 슬롯에 새로운 스택을 생성하여 저장합니다. ## AddItem 메서드 `AddItem` 메서드는 두 개의 인자를 받습니다. 첫 번째 인자 `item [original] | [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 itemCount <= 0 then log_error("[SimpleInventory] ( [chunk_id] | Guides:1114:10

[task] | distill [title] | 8. 상점 로직 만들기Ⅰ [category] | Guides [rephrased] | # 상점 로직 작성 (Shop) `Workspace > MyDesk > Create Scripts > Create Logic`에서 `Shop` 로직을 생성합니다. ## Buy(itemId, itemCount) `itemId` 상품을 `itemCount` 개 구매하고 메소를 차감합니다. - **실행 공간**: `[server]` - **동작 규칙**: 1. `_Data.ItemTable[itemId]` 참조 (없으면 에러 로그 후 종료) 2. 총 가격 계산: `itemInfo.Price * itemCount` 3. [original] | # 상점 로직 작성 1. **Workspace - MyDesk - Create Scripts - Create Logic**을 선택해 새로운 `Shop` 로직을 생성합니다. 2. `Buy()`함수를 생성해 itemId에 해당하는 상품을 itemCount만큼 구매하고, 메소를 차감하도록 작성합니다. ```lua Method: [server] void Buy (string itemId, integer itemCount) { -- itemId에 해당하는 상품을 itemCount만큼 구매 [chunk_id] | Guides:1115:0

[task] | wikipedia [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # 아이템을 인벤토리에 추가하기 본 섹션에서는 `mLua` 스크립트를 사용하여 플레이어가 소유한 아이템과 메소(Meso)를 인벤토리에 관리하는 방법을 다룹니다. 제공된 예제 코드는 서버 측에서만 실행되며, 데이터 저장소(Data Storage)를 통해 인벤토리 상태를 영속화하고 직렬화(Serialize) 및 역직렬화(Deserialize) 과정을 처리하는 로직을 포함합니다. ## 프로퍼티 정의 인벤토리를 관리하는 컴포넌트에는 다음과 같은 프로퍼티가 정의됩니다. * **Meso**: 플레이어가 보유한 메소 양을 나타내는 정 [original] | ```lua Property: [None] integer Meso = 10000 [None] table ItemStacks = {} [None] integer Capacity = 16 Method: [server only] void OnBeginPlay() { -- 데이터 스토리지에서 인벤토리 데이터를 불러옴 local userId = self.Entity.PlayerComponent.UserId local userDataStorage = _DataStorageService:GetUserDataStor [chunk_id] | Guides:1114:9

[task] | extract_knowledge [title] | 4. 아이템을 인벤토리에 추가하기 [category] | Guides [rephrased] | # SimpleInventory 이벤트 프로퍼티 `SimpleInventory` 컴포넌트에서 발생하는 이벤트는 특정 데이터 구조를 가진 이벤트 객체를 전달받습니다. 아래는 `SimpleInventory` 관련 이벤트 객체가 지니는 프로퍼티 정의입니다. ## 개념 설명 `SimpleInventory` 시스템에서는 아이템 추가, 수정, 제거 및 메소 변경 시점에 각각 다른 이벤트 타입이 발생합니다. 각 이벤트 핸들러는 해당 이벤트 타입의 인스턴스를 파라미터로 수신하며, 이벤트 객체의 프로퍼티를 읽어 현재 인벤토리 상태를 확인합니다 [original] | #### SimpleInventoryItemAddedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemModifiedEvent ```lua Property: integer SlotIndex = 0 string ItemId = "" integer ItemCount = 0 ``` #### SimpleInventoryItemRemovedEvent ```lua Property: [chunk_id] | Guides:1114:14

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