[task] | code [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | UtilLogic 서비스의 RandomIntegerRange 메서드를 활용하여 카드 덱 순서를 섞고, 섞인 순서에 따라 카드 엔티티를 생성하는 스크립트를 작성해줘. [answer] | `_UtilLogic:RandomIntegerRange` 메서드를 사용하여 카드 덱을 섞고, 그 순서에 맞춰 카드 엔티티를 생성하는 `CardBoard` 컴포넌트 스크립트입니다. ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI_Block_Group Method: [client only] void SetCards() { local deckTable = {} -- 데이터 서비스에서 카드 개수 및 스프 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 전체 스크립트 #### CardBoard 컴포넌트 ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI_Block_Group Method: [client only] Void SetCards() { local deckTable = {} local cardTable = {} local deckCount = _DataService:GetRowCount("CardSet") for
[task] | single_turn [pass] | ⏳ 미판정 [title] | 액세서리 [question] | 모자 제작 시트에서 빨간색 레이어인 data:vslot:Cp의 구체적인 역할이 무엇인가요? [answer] | 모자 제작 시트에서 빨간색 레이어인 `data:vslot:Cp`는 **모자와 헤어의 겹침 우선순위(누가 위에 보이는지)를 결정하는 역할**을 합니다. 구체적으로, 머리카락과 모자가 겹치는 영역에서 어떤 이미지가 앞으로(위쪽에) 표시될지를 제어하는 용도로 사용됩니다. 이는 모자에만 존재하는 개념이며, 해당 레이어를 통해 렌더링 순서를 관리할 수 있습니다. 참고로, 이 레이어를 포함한 모든 레이어의 이름은 절대 수정하거나 삭제하면 안 됩니다. 이름을 변경할 경우 아이템 제작이 불가능해집니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 액세서리 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_C1.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/A
[task] | code [pass] | ⏳ 미판정 [title] | 뒤통수를 덮는 모자 [question] | 따라서 "주어진 원문에 있는 정보만 사용하고, 없는 사실·API·코드 예제를 지어내지 않는다"는 지침에 따라, 해당 문서의 정보만으로 해결할 수 있는 mLua 코딩 과제를 생성할 수 없습니다. [answer] | 제시된 참고 문서는 **아바타 아이템(모자)의 그래픽 제작 시트(PSD 파일) 구조와 레이어 구성**에 대한 설명만 포함되어 있습니다. mLua 스크립트 언어, API, 컴포넌트, 이벤트 핸들러, 또는 메이플스토리 월드 스크립팅과 관련된 어떠한 정보도 문서에 존재하지 않습니다. 따라서 주어진 원문의 정보만 사용하여 mLua 코딩 과제를 생성하거나, 관련 코드를 작성하는 것은 불가능합니다. 해당 문서는 Adobe Photoshop을 이용한 모자 이미지 제작 가이드이며, 스크립트 로직이나 서버/클라이언트 통신, 엔티티 조작 등 mL [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 뒤통수를 덮는 모자의 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_B.psd","url":"https://mod-file.dn.nexoncdn.co.kr/sto
[task] | two_turn [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | `CreateCardEntities()` 함수에서 카드 엔티티의 이름을 고유하게 설정하기 위해 문자열 연결을 어떻게 적용해야 하는가? [answer] | `CreateCardEntities()` 함수에서 카드 엔티티의 이름을 고유하게 설정하려면, `_SpawnService:SpawnByModelId` 메서드의 두 번째 매개 변수(이름)에 `"Card " .. tostring(i)` 형태로 문자열 연결을 적용해야 합니다. 여기서 `i`는 카드 테이블(`cardTable`)을 순회하는 `for` 루프의 반복 변수입니다. 이렇게 하면 각 카드가 생성될 때 `"Card 1"`, `"Card 2"`, `"Card 3"`처럼 인덱스가 붙은 고유한 이름이 부여됩니다. 아래는 이 로직이 적용된 [followup] | `tostring(i)` 인덱스를 붙여 이름을 생성할 때, 기존 `"Card"` 문자열을 그대로 유지하면서 변경하는 정확한 코드 패턴은 무엇인가? [followup_answer] | 기존 `"Card"` 문자열을 그대로 유지하면서 인덱스를 붙이는 정확한 코드 패턴은 문자열 연결 연산자 `..`를 사용하여 `"Card "`와 `tostring(i)`를 결합하는 것입니다. 구체적으로 `_SpawnService:SpawnByModelId` 호출 시 두 번째 매개 변수(이름)를 다음과 같이 작성합니다: ```lua "Card " .. tostring(i) ``` 이 패턴을 적용한 전체 코드 예시는 아래와 같습니다. ```lua local card = _SpawnService:SpawnByModelId(cardM [scores] | [judge_reason] | [source_doc] | ```lua local cardCount = #cardTable for i = 1, cardCount do local spriteRUID = cardTable[i] ``` 6. `CreateCardEntities()` 함수에서 `local card = _SpawnService:SpawnByModelId(cardModelId, "Card", Vector3(0,0,0), self.CardSpawnRoot)`를 찾습니다. `"Card"` 부분을 `"Card " .. tostring(i)`로 변경하며 아
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 짝 맞추기 [question] | `CreateCardEntities` 함수에서 카드 엔티티 생성 시 `card.SpriteGUIRendererComponent.ImageRUID`에 값을 대입하는 과정이 `card.Card.SpriteRUID` 대입과 어떻게 다른지 비교 분석하여 표로 정리하세요. [answer] | 제공된 참고 문서 내 `CreateCardEntities` 함수 코드를 분석한 결과, 두 대입 문구의 차이는 다음과 같습니다. 1. **`card.Card.SpriteRUID = spriteRUID`** * **접근 경로**: `card` 엔티티에서 `Card` 컴포넌트(또는 프로퍼티)를 통해 `SpriteRUID` 필드에 접근합니다. * **역할**: 카드 객체 자체의 로직이나 상태(예: 짝 맞추기 판정 시 사용할 데이터)에 스프라이트 ID를 저장하는 용도로 보입니다. 2. **`card.SpriteG [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Property: [None] Entity CardSpawnRoot = /ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group [None] Card SelectedCard = nil Method: void SetCards () { local deckTable = {} local cardTable = {} local deckCount = _DataService:GetRowCount("CardSet") for i = 1, deckCoun
[task] | code [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | SpawnService를 사용하여 지정된 모델 ID로 카드를 생성하고, 생성된 카드 엔티티의 TransformComponent를 통해 CardSpawnRoot 아래에 위치를 배치하는 스크립트를 작성해줘. [answer] | `_SpawnService:SpawnByModelId` 메서드의 마지막 인자로 `parent`를 지정하면, 생성된 엔티티가 해당 부모 엔티티의 하위 트리에 자동으로 배치됩니다. 따라서 생성된 카드의 `TransformComponent.Position`을 수동으로 수정할 필요 없이, `self.CardSpawnRoot`를 부모로 전달하는 것이 올바른 구현 방식입니다. 참고 문서에 포함된 `CardBoard` 컴포넌트의 `CreateCardEntities` 메서드를 기반으로, 지정한 모델 ID로 카드를 생성하고 `CardSpawnRo [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 전체 스크립트 #### CardBoard 컴포넌트 ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI_Block_Group Method: [client only] Void SetCards() { local deckTable = {} local cardTable = {} local deckCount = _DataService:GetRowCount("CardSet") for
[task] | code [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | CardBoard 컴포넌트의 CreateCardEntities(table cardTable) 함수를 정의하고, cardTable의 길이에 따라 _SpawnService:SpawnByModelId를 호출하여 카드 엔티티를 배치하며 생성된 엔티티의 Card 컴포넌트 SpriteRUID 프로퍼티에 cardTable[i] 값을 설정하는 코드를 작성해줘. [answer] | 요청하신 `CardBoard` 컴포넌트의 `CreateCardEntities(table cardTable)` 함수 코드는 다음과 같습니다. 1. `cardTable`의 길이(`#cardTable`)를 기준으로 반복문을 설정합니다. 2. `_SpawnService:SpawnByModelId`를 호출하여 카드 엔티티를 생성합니다. 3. 생성된 엔티티의 `Card` 컴포넌트(`.Card`)에 접근하여 `SpriteRUID` 프로퍼티에 `cardTable[i]` 값을 할당합니다. 4. 생성된 엔티티를 `CardSpawnRoot` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 하나의 카드를 보여주는 것에 성공했으니, 이제는 모든 카드를 켜줄 차례입니다. 아래 그림과 같이 모든 카드가 나타나게 만들어 봅시다. # 여러 개의 카드 보여주기 하나의 카드가 잘 나타나는 걸 확인했으니 이제는 모든 카드를 모든 카드를 뒤섞어 보여줄 차례입니다. 이 과정에서 다양한 함수와 이전에 완성한 **CardSet** 데이터 셋을 활용합니다. [DataService](/apiReference/Services/DataService)를 참고하세요. 1. **Card** 컴포넌트를 활용해 여러 개의 RUID 값을 가지고 올 수
[task] | code [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | Card 컴포넌트에 [None] string SpriteRUID = "" 프로퍼티를 추가하고, CardBoard의 CreateCardEntities(table cardTable) 메서드에서 cardTable의 각 인덱스 값을 Card 컴포넌트의 SpriteRUID 프로퍼티에 할당하도록 수정해줘. [answer] | 요청하신 대로 `Card` 컴포넌트에 `SpriteRUID` 프로퍼티를 추가하고, `CardBoard`의 `CreateCardEntities` 메서드에서 `cardTable`의 값으로 카드 엔티티를 생성한 뒤, 생성된 카드의 `SpriteRUID` 프로퍼티에 해당 값을 할당하는 방식으로 수정했습니다. ```lua Property: [None] string SpriteRUID = "" ``` ```lua [client only] void CreateCardEntities(table cardTable) { local card [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 하나의 카드를 보여주는 것에 성공했으니, 이제는 모든 카드를 켜줄 차례입니다. 아래 그림과 같이 모든 카드가 나타나게 만들어 봅시다. # 여러 개의 카드 보여주기 하나의 카드가 잘 나타나는 걸 확인했으니 이제는 모든 카드를 모든 카드를 뒤섞어 보여줄 차례입니다. 이 과정에서 다양한 함수와 이전에 완성한 **CardSet** 데이터 셋을 활용합니다. [DataService](/apiReference/Services/DataService)를 참고하세요. 1. **Card** 컴포넌트를 활용해 여러 개의 RUID 값을 가지고 올 수
[task] | single_turn [pass] | ⏳ 미판정 [title] | 짝 맞추기 [question] | CardPairGameLogic에서 OnCardClicked가 [client only]로 선언된 이유는 무엇이며 서버에서 호출하면 어떤 문제가 생기는지 [answer] | `CardPairGameLogic` 스크립트에서 `OnCardClicked` 메서드가 `[client only]`로 선언된 이유는 이 함수가 **클라이언트 측에서만 실행되어야 하는 UI 및 로컬 상태 변경**을 처리하기 때문입니다. 구체적인 이유와 서버에서 호출 시 발생하는 문제는 다음과 같습니다. ### 1. `[client only]` 선언의 이유 1. **UI 엔티티 접근**: * `OnCardClicked`는 `self.CardPairGameUI` (경로: `/ui/CardPairGameUI`)를 참조하여 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Property: [None] string SpriteRUID = "" Method: void CardOn() { self.Entity.SpriteGUIRendererComponent.Color = Color(81/255,81/255,81/255,1) } void CardOff() { self.Entity.SpriteGUIRendererComponent.Color = Color(255/255,255/255,255/255,1) } void SetDestroyed() { self.Entity.Vi
[task] | single_turn [pass] | ⏳ 미판정 [title] | 액세서리 [question] | data 폴더 안의 data:use_zmap_preset1 파일은 아바타의 어떤 구조와 관련이 있나요? [answer] | `data:use_zmap_preset1` 파일은 아바타의 **이미지 레이어(층) 순서**와 관련이 있습니다. 아바타는 몸을 기준으로 옷, 방패, 무기 등의 이미지가 위에서 아래로 순서대로 쌓여 만들어지는 구조를 가지고 있습니다. `data:use_zmap_preset1`은 이러한 아바타를 구성하는 이미지들이 쌓이는 순서, 즉 분리된 각 Sprite의 높이가 정렬된 정보(zmap)를 포함하고 있어, 아이템이 아바타 위에서 올바르게 겹쳐 보이도록 하는 데 사용됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 액세서리 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_C1.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/A
[task] | two_turn [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | 카드가 생성된 후 각 카드에 스프라이트를 할당하는 과정(`card.Card.SpriteRUID` 및 `card.SpriteGUIRendererComponent.ImageRUID`)에서 `spriteRUID` 값은 어디서 가져오게 되는가? [answer] | 카드가 생성된 후 각 카드에 스프라이트를 할당할 때 사용되는 `spriteRUID` 값은 `cardTable`이라는 테이블에서 가져옵니다. 구체적인 흐름은 다음과 같습니다. 1. `CreateCardEntities(cardTable)` 함수는 매개변수로 `cardTable`을 받습니다. 2. 함수 내부에서 `cardTable`의 길이(`#cardTable`)만큼 반복문을 실행하며, 인덱스 `i`에 해당하는 값인 `cardTable[i]`를 `spriteRUID`라는 로컬 변수에 저장합니다. 3. 이 `spriteRUID` [followup] | `cardTable[i]` 인덱싱을 통해 값을 추출하는 로직과, 이 값이 `SpawnByModelId` 호출과 어떻게 연결되는지 코드 흐름을 설명해 주시겠는가? [followup_answer] | `cardTable[i]` 인덱싱과 `SpawnByModelId` 호출은 `for` 루프 내에서 순차적으로 연결됩니다. 구체적인 코드 흐름은 다음과 같습니다. 1. **반복 횟수 결정**: `local cardCount = #cardTable`을 통해 `cardTable` 테이블에 포함된 요소의 총 개수를 구합니다. 2. **루프 실행**: `for i = 1, cardCount do` 문을 통해 1부터 `cardCount`까지 반복합니다. 3. **스프라이트 값 추출**: 루프의 각 반복마다 `local spriteRUID [scores] | [judge_reason] | [source_doc] | ```lua local cardCount = #cardTable for i = 1, cardCount do local spriteRUID = cardTable[i] ``` 6. `CreateCardEntities()` 함수에서 `local card = _SpawnService:SpawnByModelId(cardModelId, "Card", Vector3(0,0,0), self.CardSpawnRoot)`를 찾습니다. `"Card"` 부분을 `"Card " .. tostring(i)`로 변경하며 아
[task] | single_turn [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | Property 블록의 CardSpawnRoot에 Entity 타입의 경로를 직접 지정하는 방식이, 스크립트 안에서 _EntityService:GetEntityByPath로 동적으로 조회하는 방식과 어떤 차이가 있나요? [answer] | 제공된 참고 문서에는 `Property` 블록의 `Entity` 타입 경로 지정 방식과 `_EntityService:GetEntityByPath` 메서드를 통한 동적 조회 방식 간의 **차이점, 장단점, 또는 동작 원리에 대한 설명이 포함되어 있지 않습니다.** 따라서 두 방식의 차이에 대해 답변할 수 있는 정보가 없습니다. 참고 문서에 존재하는 정보만 정리하면 다음과 같습니다. 1. **Property 블록 사용 예시 (CardBoard 컴포넌트)** * `Property` 블록에서 `[None]` 속성으로 `E [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 전체 스크립트 #### CardBoard 컴포넌트 ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI_Block_Group Method: [client only] Void SetCards() { local deckTable = {} local cardTable = {} local deckCount = _DataService:GetRowCount("CardSet") for
[task] | single_turn [pass] | ⏳ 미판정 [title] | 액세서리 [question] | Avatar_Cap_C1과 Avatar_Cap_C2 시트의 차이점을 간단히 설명해 주시겠어요? [answer] | Avatar_Cap_C1과 Avatar_Cap_C2 시트의 주요 차이점은 액세서리가 헤어의 **앞**에 배치되는지 **뒤**에 배치되는지에 따라 구분됩니다. * **Avatar_Cap_C1 (헤어 앞 액세서리)**: 모자나 액세서리가 머리카락보다 앞에 보이도록 제작하는 시트입니다. * **Avatar_Cap_C2 (헤어 뒤 액세서리)**: 모자나 액세서리가 머리카락보다 뒤에 보이도록 제작하는 시트입니다. 두 시트 모두 앞모습과 뒷모습을 그릴 수 있는 노란색 레이어(`edithere:cap_cap_34` 등)와 data 폴 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 액세서리 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_C1.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/A
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 액세서리 [question] | 모자와 헤어의 겹침 우선순위를 결정하는 빨간색 레이어의 이름과, 이 레이어가 모자 파일에만 존재하는 이유를 3문장 이내로 설명해 주세요. [answer] | 빨간색 레이어의 이름은 `data:vslot:Cp`입니다. 이 레이어는 머리카락과 모자가 겹칠 때 어떤 것이 위에 보이는지 결정하는 우선순위 역할을 합니다. 문서에 따르면 이 개념은 모자 제작 파일에만 존재합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 액세서리 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_C1.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/A
[task] | two_turn [pass] | ⏳ 미판정 [title] | 짝 맞추기 [question] | 카드 짝 맞추기 게임에서 카드 덱을 생성하고 화면에 배치하는 전체 프로세스는 어떻게 작동하나요? [answer] | 카드 짝 맞추기 게임에서 카드 덱을 생성하고 화면에 배치하는 과정은 `SetCards` 메서드를 중심으로 진행됩니다. 이 메서드는 데이터에서 카드 정보를 가져와 무작위로 섞은 후, 실제 게임 객체(엔티티)로 생성하는 로직을 포함합니다. 전체 프로세스는 다음과 같은 단계로 작동합니다. 1. **카드 데이터 수집**: * `_DataService:GetRowCount("CardSet")`를 호출하여 데이터 테이블 `CardSet`의 행 수(총 카드 종류 수)를 구합니다. * `for` 루프를 통해 `CardS [followup] | `SetCards()` 함수 내에서 `_DataService` 로부터 데이터를 가져와 셔플하는 로직과, `CreateCardEntities()` 에서 `_SpawnService` 를 사용하여 실제 UI 엔티티를 생성하는 부분의 코드를 구체적으로 보여주세요. [followup_answer] | `SetCards()` 함수는 `_DataService`를 통해 카드 데이터(`CardSet`)를 조회하고, 이를 무작위로 섞어 짝을 이룰 수 있는 테이블을 구성한 후, `CreateCardEntities()`를 호출하여 실제 UI 엔티티를 생성합니다. `CreateCardEntities()`는 `_SpawnService`를 이용해 지정된 모델 ID로 카드 엔티티를 스폰하고, 해당 카드에 스프라이트 정보를 적용합니다. 구체적인 코드는 다음과 같습니다. ```lua Property: [None] Entity CardSpawnRoo [scores] | [judge_reason] | [source_doc] | ```lua Property: [None] Entity CardSpawnRoot = /ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group [None] Card SelectedCard = nil Method: void SetCards () { local deckTable = {} local cardTable = {} local deckCount = _DataService:GetRowCount("CardSet") for i = 1, deckCoun
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 액세서리 [question] | `Avatar_Cap_C1`과 `Avatar_Cap_C2`에서 앞모습과 뒷모습을 그릴 수 있는 노란색 레이어의 정확한 이름을 4줄 이내로 나열해 주세요. [answer] | - `Avatar_Cap_C1` 앞모습: `edithere:cap_cap_34` - `Avatar_Cap_C1` 뒷모습: `edithere:cap_backCap_92` - `Avatar_Cap_C2` 앞모습: `edithere:cap_cap_34` - `Avatar_Cap_C2` 뒷모습: `edithere:cap_backCapAccessory_118` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 액세서리 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_C1.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/A
[task] | two_turn [pass] | ⏳ 미판정 [title] | 짝 맞추기 [question] | 카드 짝 맞추기 게임에서 카드를 선택하고 짝이 맞는지 판별하는 로직을 어떻게 구현하나요? [answer] | 카드 짝 맞추기 게임에서 카드 선택과 짝 판별 로직은 `Card` 컴포넌트와 게임 로직을 담당하는 컴포넌트(예: `CardBoard`)의 함수들을 조합하여 구현합니다. ### 1. 짝 판별 로직 (`Card` 컴포넌트) 두 카드가 같은 모양인지(`SpriteRUID` 동일)와 서로 다른 엔티티인지(`Entity` 다름)를 확인하는 `IsPairOf()` 함수를 `Card` 컴포넌트에 정의합니다. ```lua [client only] boolean IsPairOf (Card other) { return (self.Sprit [followup] | `IsPairOf()` 함수에서 `SpriteRUID` 비교와 `Entity` 동일성 확인이 왜 필요한지, 그리고 짝이 맞았을 때 `SetDestroyed()`를 호출하여 `Visible`을 false로 바꾸는 과정의 코드 예시를 보여주세요. [followup_answer] | `IsPairOf()` 함수에서 두 가지 조건을 확인하는 이유는 다음과 같습니다. 1. **`SpriteRUID` 비교**: 두 카드가 동일한 모양(텍스처)인지 확인하기 위함입니다. 짝 맞추기 게임의 핵심 규칙은 같은 모양의 카드끼리 쌍을 이루는 것이므로, `SpriteRUID` 값이 같아야 짝으로 인정됩니다. 2. **`Entity` 동일성 확인 (`self.Entity ~= other.Entity`)**: 사용자가 같은 카드를 두 번 연속해서 선택하는 것을 방지하기 위함입니다. 만약 `SpriteRUID`만 비교하면, 같은 [scores] | [judge_reason] | [source_doc] | # 짝 맞추기 카드의 색상을 바꿔보았으니 이번에는 두 개의 카드를 선택하고, 맞으면 사라질 수 있도록 만들어봅시다. 1. **Card 컴포넌트**에서 `SetDestroyed` 함수에 아래와 같이 작성합니다. 카드 엔티티의 Visible 프로퍼티를 false로 바꾸어 비활성화 시킵니다. 이는 파괴된 상태로 사용합니다. ```lua [client only] void SetDestroyed () { self.Entity.Visible = false } ``` 2. 짝이
[task] | code [pass] | ⏳ 미판정 [title] | 가발 [question] | 주어진 문서에는 mLua 스크립트 API, 컴포넌트, 서비스 정보 또는 코딩 예제가 전혀 포함되어 있지 않습니다. 문서의 내용은 Photoshop을 이용한 가발(모자) 이미지 제작 시트의 레이어 구성과 편집 가이드만 다루고 있습니다. 따라서 요청하신 'mLua 코딩 과제'를 문서 내 정보만으로 생성할 수 없습니다. [answer] | 제시된 참고 문서에는 mLua 스크립트 API, 컴포넌트, 서비스 정보 또는 코딩 예제가 전혀 포함되어 있지 않습니다. 문서의 내용은 Adobe Photoshop을 이용하여 가발(모자) 이미지 제작 시트의 레이어 구성(회색/노란색/빨간색 레이어)과 편집 가이드만 다루고 있습니다. 따라서 요청하신 'mLua 코딩 과제'나 관련 코드 예제를 문서 내 정보만으로 생성할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 가발 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_D.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/Avat
[task] | code [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | `CreateCardEntities` 함수에서 루프 변수 `i` 를 사용하여 생성되는 각 카드 엔티티의 이름을 "Card 1", "Card 2" 처럼 구별되도록 `_SpawnService:SpawnByModelId` 의 두 번째 매개변수에 `"Card " .. tostring(i)` 를 전달하는 코드를 작성하세요. [answer] | ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI_Block_Group Method: [client only] void CreateCardEntities(cardTable) { local cardModelId = "Model_Card EntiryID" local cardCount = #cardTable for i = 1, cardCount do local spriteRUID = cardT [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua local cardCount = #cardTable for i = 1, cardCount do local spriteRUID = cardTable[i] ``` 6. `CreateCardEntities()` 함수에서 `local card = _SpawnService:SpawnByModelId(cardModelId, "Card", Vector3(0,0,0), self.CardSpawnRoot)`를 찾습니다. `"Card"` 부분을 `"Card " .. tostring(i)`로 변경하며 아
[task] | single_turn [pass] | ⏳ 미판정 [title] | 짝 맞추기 [question] | CreateCardEntities 메서드에서 스프라이트 이미지를 설정할 때 card.Card.SpriteRUID 와 card.SpriteGUIRendererComponent.ImageRUID 두 가지 모두를 지정해야 하는 이유와 이 중 하나만 생략했을 때의 결과는 어떻게 되나요? [answer] | 제공된 참고 문서에는 `card.Card.SpriteRUID`와 `card.SpriteGUIRendererComponent.ImageRUID`를 각각 설정해야 하는 구체적인 이유나, 하나만 생략했을 때 발생하는 결과에 대한 설명이 포함되어 있지 않습니다. 문서에서는 `CreateCardEntities` 메서드 내에서 두 값을 모두 설정하는 코드 예제는 제시하고 있지만, 해당 로직의 내부 동작 원리나 생략 시 시나리오에 대한 기술적 근거는 찾을 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Property: [None] Entity CardSpawnRoot = /ui/CardPairGameUI/UI_Board/UI_Blocks/UI_Block_Group [None] Card SelectedCard = nil Method: void SetCards () { local deckTable = {} local cardTable = {} local deckCount = _DataService:GetRowCount("CardSet") for i = 1, deckCoun
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 얼굴을 가리는 탈 [question] | 모자 제작 시트의 회색, 빨간색, 노란색 레이어 각각의 역할을 3문장 이내로 설명하세요. [answer] | 회색 레이어는 아이템을 데이터화하는 data 폴더와 가이드용 선을 포함하며, 모두 잠겨 있어 수정할 필요가 없습니다. 노란색 레이어는 크리에이터가 실제 얼굴을 가리는 탈을 그리는 작업 공간입니다. 빨간색 레이어는 모자와 헤어가 겹칠 경우 어느 쪽이 먼저 보이는지 우선순위를 결정하는 역할을 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 얼굴을 가리는 탈 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_E.psd","url":"https://mod-file.dn.nexoncdn.co.kr/stora
[task] | code [pass] | ⏳ 미판정 [title] | 얼굴을 가리는 탈 [question] | 제공된 문서는 Adobe Photoshop을 이용한 아바타 모자(얼굴을 가리는 탈) 이미지 제작 시트 설명만 포함하고 있으며, mLua 스크립트 언어, API, 컴포넌트, 서비스 및 코드 예제에 대한 정보가 전혀 포함되어 있지 않습니다. 따라서 주어진 문서의 정보만 사용하여 mLua 코딩 과제를 만드는 것은 불가능합니다. [answer] | 제공된 참고 문서는 Adobe Photoshop을 이용한 아바타 모자(얼굴을 가리는 탈) 이미지 제작 시트 설명만 포함하고 있습니다. mLua 스크립트 언어, API, 컴포넌트, 서비스 및 코드 예제에 대한 정보는 문서에 포함되어 있지 않아, 주어진 문서의 정보만 사용하여 mLua 코드를 작성하거나 관련 질문을 답변하는 것은 불가능합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 얼굴을 가리는 탈 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_E.psd","url":"https://mod-file.dn.nexoncdn.co.kr/stora
[task] | code [pass] | ⏳ 미판정 [title] | 짝 맞추기 [question] | SpriteRUID가 동일한 두 카드를 찾지 못하면 다시 선택을 초기화하는 Card:IsPairOf 로직을 구현해줘 [answer] | `Card:IsPairOf` 메서드는 두 카드의 `SpriteRUID` 값이 같으면서도 서로 다른 엔티티인지(`self.Entity ~= other.Entity`)를 확인하여 짝이 맞는지 판별합니다. 짝이 맞지 않는 경우(즉, `IsPairOf`가 `false`를 반환하는 경우) 선택 초기화 로직은 `CardPairGameLogic` 스크립트의 `OnCardClicked` 메서드에서 처리됩니다. `oldCard:IsPairOf(newCard)` 결과가 `false`이면 `cardboard:DeselectCard()`를 호출하여 이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua Property: [None] string SpriteRUID = "" Method: void CardOn() { self.Entity.SpriteGUIRendererComponent.Color = Color(81/255,81/255,81/255,1) } void CardOff() { self.Entity.SpriteGUIRendererComponent.Color = Color(255/255,255/255,255/255,1) } void SetDestroyed() { self.Entity.Vi
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 가발 [question] | 노란색 레이어에서 가발의 앞모습과 뒷모습을 각각 그릴 수 있는 `edithere` 레이어의 정확한 이름은 무엇인지? '3문장 이내로' [answer] | 앞모습은 `edithere:cap_cap_34` 레이어에, 뒷모습은 `edithere:cap_backCap_92` 레이어에 그릴 수 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 가발 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_D.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/Avat
[task] | code [pass] | ⏳ 미판정 [title] | 뒤통수를 덮는 모자 [question] | 문서의 내용은 Adobe Photoshop을 이용한 모자 이미지(PSD) 제작 시트 설명이며, 스크립트 코딩과 관련된 기술적 사양이 없습니다. [answer] | 제시된 참고 문서는 메이플스토리 월드의 mLua 스크립팅 API나 코딩 기술적 사양이 아닌, **Adobe Photoshop을 활용한 아바타 아이템(뒤통수를 덮는 모자) 이미지 제작 시트 구조와 레이어 구성**에 대한 안내입니다. 따라서 해당 문서에는 mLua 스크립트 코드, API, 이벤트 핸들러, 또는 컴포넌트 접근 방식에 대한 정보가 전혀 포함되어 있지 않습니다. 문서에 설명된 모자 제작 시트의 핵심 구성은 다음과 같습니다. 1. **필수 소프트웨어**: Adobe Photoshop 2. **파일**: `Avatar_ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 뒤통수를 덮는 모자의 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_B.psd","url":"https://mod-file.dn.nexoncdn.co.kr/sto
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 얼굴을 가리는 탈 [question] | 얼굴을 가리는 탈 제작 시 추천되는 최대 크기와 절대 수정할 수 없는 레이어 이름 변경 금지 사유를 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Property: [None] number MaxWidth = 120 number MaxHeight = 120 Method: [server only] void OnBeginPlay() { -- 아바타 발을 기준으로 최대 120x120 안에서 제작을 권장합니다. -- 모든 레이어의 이름을 수정하거나 삭제할 경우 아이템을 제작할 수 없습니다. -- 따라서 절대 이름을 변경하지 마세요. } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 얼굴을 가리는 탈 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_E.psd","url":"https://mod-file.dn.nexoncdn.co.kr/stora
[task] | single_turn [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | SetCards 함수에서 deckTable을 무작위 섞은 뒤 cardTable에 그대로 복사하는 로직인데, 이렇게 하면 카드가 짝이 아닌 단일 스프라이트로만 배치되는 것 아닌가요? [answer] | 아니요, 카드가 짝이 아닌 단일 스프라이트로만 배치되는 것이 아닙니다. 참고 문서의 `SetCards` 함수 로직을 분석해 보면, `deckTable`이 실제로는 **카드 한 쌍에 해당하는 스프라이트 ID 2개를 포함**하도록 구성됩니다. 구체적인 흐름은 다음과 같습니다. 1. **deckTable 생성:** * `_DataService:GetRowCount("CardSet")`을 통해 데이터셋의 행 수(`deckCount`)를 가져옵니다. * 이 `deckCount`는 짝 맞추기 게임에서 필요한 **총 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 전체 스크립트 #### CardBoard 컴포넌트 ```lua Property: [None] Entity CardSpawnRoot = /ui/CardParirGameUi/UI_Board/UI_Blocks/UI_Block_Group Method: [client only] Void SetCards() { local deckTable = {} local cardTable = {} local deckCount = _DataService:GetRowCount("CardSet") for
[task] | code [pass] | ⏳ 미판정 [title] | 여러 개의 카드 보여주기 [question] | CardBoard 컴포넌트의 `CreateCardEntities(cardTable)` 메서드를 구현하여 `cardTable` 배열의 길이만큼 `_SpawnService:SpawnByModelId` 로 "Card " .. tostring(i) 이름을 가진 엔티티를 생성하고, 생성된 엔티티의 `SpriteRUID` 및 `SpriteGUIRendererComponent.ImageRUID` 에 해당 인덱스의 `spriteRUID` 를 할당하세요. [answer] | `CardBoard` 컴포넌트에 `CreateCardEntities(cardTable)` 메서드를 구현하려면, 문서에 제시된 코드를 기준으로 작성합니다. `cardTable` 배열의 길이만큼 반복문을 돌리며, 각 인덱스에 해당하는 `spriteRUID` 를 추출합니다. 생성된 카드 엔티티의 이름은 `"Card " .. tostring(i)` 형식이어야 하며, 생성 시 `self.CardSpawnRoot` 를 부모로 지정합니다. 생성 직후 해당 엔티티의 `Card` 컴포넌트 속성인 `SpriteRUID` 와 `SpriteGUIRen [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua local cardCount = #cardTable for i = 1, cardCount do local spriteRUID = cardTable[i] ``` 6. `CreateCardEntities()` 함수에서 `local card = _SpawnService:SpawnByModelId(cardModelId, "Card", Vector3(0,0,0), self.CardSpawnRoot)`를 찾습니다. `"Card"` 부분을 `"Card " .. tostring(i)`로 변경하며 아
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 얼굴이 보이는 탈 [question] | 노란색 레이어에서 얼굴이 보이는 탈의 앞모습을 그릴 수 있는 구체적인 레이어 이름을 3문장 이내로 설명하세요. [answer] | 노란색 레이어의 `case1.front` 그룹 안에 `edithere:cap_cap_34` 라는 레이어가 있습니다. 이 레이어가 얼굴이 보이는 탈의 앞모습을 직접 그리는 곳입니다. 따라서 앞모습 디자인을 작업할 때는 반드시 `edithere:cap_cap_34` 레이어를 사용해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 얼굴이 보이는 탈 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_F.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 가발 [question] | 모자 아이템 제작 시 권장되는 최대 해상도 크기와, 절대 변경하지 말아야 하는 레이어 관련 주의사항은 무엇인지? '단계별 번호 목록으로' [answer] | 모자 아이템 제작 시 권장되는 최대 해상도 크기와 레이어 관련 주의사항은 다음과 같습니다. 1. 모자는 아바타 발을 기준으로 최대 120x120 크기의 범위 안에서 제작하는 것이 권장됩니다. 2. 모든 레이어의 이름을 수정하거나 삭제할 경우 아이템을 제작할 수 없으므로, 레이어 이름은 절대 변경하지 말아야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 가발 제작 시트를 소개합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile {"name":"Avatar_Cap_D.psd","url":"https://mod-file.dn.nexoncdn.co.kr/storage/Avat