[task] | single_turn [pass] | ⏳ 미판정 [title] | 헤어 만들기 [question] | 아바타 헤어 제작 시 edithere:back_backHair_91 레이어와 모자 관련 레이어의 작업 순서가 겹치면 안 되는 이유가 무엇인가요? [answer] | 제시된 참고 문서에는 `edithere:back_backHair_91` 레이어와 모자 관련 레이어의 작업 순서가 겹치면 안 되는 이유에 대한 정보가 포함되어 있지 않습니다. 문서에는 헤어 제작 시 `edithere:back_backHair_91`, `edithere:back_backHairBelowCapWide_94`, `edithere:back_backHairBelowCapNarrow_95` 레이어에서의 이미지 작업 순서(기본 모양 그리기 -> 눌린 머리 지우기 -> 복사 및 간격 조정)만 설명되어 있을 뿐, 모자 레이어와의 상 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | edithere:back_backHair_91, edithere:back_backHairBelowCapWide_94, edithere:back_backHairBelowCapNarrow_95 레이어에 이미지 작업을 합니다. 1. edithere:back_backHair_91에 'Pencil tool'로 기본 모양을 검정색으로 그린 뒤 색상을 변경하고, 세부 헤어 모양을 그립니다. 2. edithere:back_backHairBelowCapWide_94 레이어에 눌린 머리를 두상에 맞게 지워줍니다. 3. 2번을 복사하여 edit
[task] | code [pass] | ⏳ 미판정 [title] | 헤어 만들기 [question] | HandleTouchEvent 이벤트 핸들러를 구현하여 사용자가 터치하면 log 로 "Touched"를 출력하고, _UserService 로 해당 유저의 UserId 를 가져와 변수에 저장하는 스크립트를 작성해줘 [answer] | ```lua Event Handler: [self] HandleTouchEvent(TouchEvent event) { log("Touched") local UserId = event.UserId } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. NoCap 헤어의 뒷모습을 그릴 수 있는 레이어와 모자 샘플이 포함되어 있습니다. [모자 만들기](/docs?postId=592) vslot의 3번 유형에 해당하는 모자 샘플입니다. * **guide_cap_samples**: 기본 헤어로 머리 모양이 변하지 않는 모자 샘플이 포함되어 있습니다. * **edithere:back_backHair_91**: 헤어의 뒷모습을 그릴 수 있는 레이어입니다. 앞모습에서는 별도의 레이어에 그린 긴 머리를 함께 그려야합니다 2. WithCap 모자를 썼을 때 눌리는 헤어의
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | 구매 성공 시 포션 지급 로직만 코드 블록으로 출력하고, 나머지 부분은 주석으로 처리하세요. [answer] | ```lua Method: [server only] void OnBeginPlay() { _WorldShopService:SetProcessPurchaseCallback(self.ProcessPurchase) } [server only] boolean ProcessPurchase(any purchaseInfo) { local userEntity = _UserService:GetUserEntityByUserId(purchaseInfo.UserId) if _EntityService:IsValid(use [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **MyShopLogic**에 포션 상품 구매에 성공하는 경우 포션 100개를 얻을 수 있도록 아래와 같이 입력합니다. `WorldShopService:SetProcessPurchaseCallback`을 활용해 상품 구매가 발생했을 때 상품을 지급합니다. 상품을 지급이 성공하면 true를, 실패하면 false를 반환해야 합니다. ```lua Method: [server only] void OnBeginPlay() { _WorldShopService:SetProcessPurchaseCallback(self.ProcessPu
[task] | two_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | 유료화 월드 숍 서비스에서 이용권 구매 시 유저 소유권 관련 주의사항과 테스트 권장 사항이 무엇인가요? [answer] | 유료화 월드 숍 서비스에서 이용권 구매 시 유저 소유권 관련 주의사항과 테스트 권장 사항은 다음과 같습니다. 1. **소유권 확인**: 이용권을 출시하기 전에 구매한 유저만 해당 아이템을 소유할 수 있는지 반드시 확인해야 합니다. 2. **테스트 권장 사항**: 메이커에서 테스트용 유저를 추가하여 이용권을 구매한 사람만 소유할 수 있는지 확인한 후 월드를 출시하는 것이 권장됩니다. 이 외에도 유료 확률형 콘텐츠를 제공할 경우, 확률 정보 공개 가이드에 따라 콘텐츠 사용 전 사용자에게 고지할 의무가 있습니다. [followup] | 메이커에서 테스트용 유저를 추가해 이용권 구매 후 소유 여부를 확인하는 구체적인 절차는 어떻게 진행하나요? [followup_answer] | 제공된 참고 문서에는 메이커에서 테스트용 유저를 추가하고 이용권 구매 후 소유 여부를 확인하는 **구체적인 단계별 절차**(예: 메뉴 경로, 버튼 위치, 특정 코드 작성 방법 등)가 명시되어 있지 않습니다. 문서에는 다음과 같은 권장 사항만 언급되어 있습니다: 1. 메이커에서 **테스트용 유저를 추가**합니다. 2. 해당 유저가 **이용권을 구매**합니다. 3. 구매한 사람만 **소유할 수 있는지 확인**합니다. 4. 확인 후 **월드 출시**를 진행합니다. 구체적인 테스트 진행 방법이나 UI 조작 절차에 대한 정보는 제 [scores] | [judge_reason] | [source_doc] | > **Tip** > 구매한 유저만 소유할 수 있는지 이용권 출시 전 반드시 확인해야 합니다. > 메이커에서 테스트용 유저를 추가해 이용권을 구매한 사람만 소유할 수 있는지 확인 후 월드 출시하기를 권장합니다. ##### 참고 가이드 ‘유료’ 확률형 콘텐츠를 제공하는 경우 확률 정보 공개 가이드에 따라 콘텐츠 사용 전 사용자에게 고지해야 할 의무가 있습니다. [확률 정보 공개](/docs/?postId=667)를 참고해 상품을 제작하길 바랍니다. * [상품 등록하기](/docs?postId=581) * [상품 관리하기](/doc
[task] | code [pass] | ⏳ 미판정 [title] | 헤어 만들기 [question] | _UserService:SubscribeUserEnterEvent 를 사용해 유저가 입장하면 _EntityService:GetEntityByPath 로 특정 경로에 있는 엔티티를 찾고, 그 엔티티의 TransformComponent.Position 을 설정하여 지정된 좌표로 이동시키는 스크립트를 작성해줘 [answer] | 제시된 참고 문서에는 `_UserService:SubscribeUserEnterEvent` API, `UserEnterEvent` 이벤트 핸들러, 또는 엔티티의 `TransformComponent.Position`을 직접 설정하여 이동시키는 기능에 대한 설명이 포함되어 있지 않습니다. 문서에 있는 정보만 사용해야 하므로, 요청하신 특정 API와 기능을 사용한 스크립트를 작성해 드릴 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. NoCap 헤어의 뒷모습을 그릴 수 있는 레이어와 모자 샘플이 포함되어 있습니다. [모자 만들기](/docs?postId=592) vslot의 3번 유형에 해당하는 모자 샘플입니다. * **guide_cap_samples**: 기본 헤어로 머리 모양이 변하지 않는 모자 샘플이 포함되어 있습니다. * **edithere:back_backHair_91**: 헤어의 뒷모습을 그릴 수 있는 레이어입니다. 앞모습에서는 별도의 레이어에 그린 긴 머리를 함께 그려야합니다 2. WithCap 모자를 썼을 때 눌리는 헤어의
[task] | single_turn [pass] | ⏳ 미판정 [title] | 헤어 만들기 [question] | 뒷머리를 묶은 스타일을 만들고 싶을 때, 기존에 그린 긴 머리를 어떻게 수정해야 묶인 간격이 좁아져 보이는지 알고 싶습니다. [answer] | 뒷머리를 묶은 스타일로 보이게 하려면 `edithere:back_backHairBelowCapNarrow_95` 레이어에서 기존에 그린 긴 머리를 지우고, 묶인 뒷머리의 간격이 좁아 보이도록 다시 그려야 합니다. 구체적인 작업 순서는 다음과 같습니다. 1. `edithere:back_backHairBelowCapWide_94` 레이어에서 두상에 맞게 눌린 머리를 지운 작업을 복사합니다. 2. 복사한 내용을 `edithere:back_backHairBelowCapNarrow_95` 레이어에 붙여넣습니다. 3. `edithere:b [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | edithere:back_backHair_91, edithere:back_backHairBelowCapWide_94, edithere:back_backHairBelowCapNarrow_95 레이어에 이미지 작업을 합니다. 1. edithere:back_backHair_91에 'Pencil tool'로 기본 모양을 검정색으로 그린 뒤 색상을 변경하고, 세부 헤어 모양을 그립니다. 2. edithere:back_backHairBelowCapWide_94 레이어에 눌린 머리를 두상에 맞게 지워줍니다. 3. 2번을 복사하여 edit
[task] | two_turn [pass] | ⏳ 미판정 [title] | 헤어 만들기 [question] | edithere:back_backHair_91, edithere:back_backHairBelowCapWide_94, edithere:back_backHairBelowCapNarrow_95 레이어를 활용한 헤어 아이템 제작 시, 각 레이어에 할당된 구체적인 역할과 작업 순서는 어떻게 되나요? [answer] | 헤어 아이템을 제작할 때는 `edithere:back_backHair_91`, `edithere:back_backHairBelowCapWide_94`, `edithere:back_backHairBelowCapNarrow_95` 세 가지 레이어에 각각 다음과 같은 역할을 부여하고, 순서대로 작업합니다. **1. edithere:back_backHair_91 (기본 헤어 형태)** * **역할**: 헤어의 기본 외형과 색상을 정의합니다. * **작업**: 'Pencil tool'을 사용하여 기본 헤어 모양을 검정색으로 그린 뒤 [followup] | 묶인 뒷머리의 간격을 좁히기 위해 edithere:back_backHairBelowCapNarrow_95 레이어에서 기존 긴 머리를 지우고 다시 그릴 때, edithere:back_backHairBelowCapWide_94 레이어의 작업 결과물을 복사하여 사용하는 과정에서 주의해야 할 점이나 구체적인 수정 방법은 무엇인가요? [followup_answer] | 참고 문서에 따르면, `edithere:back_backHairBelowCapNarrow_95` 레이어에서 묶인 뒷머리 간격을 좁히기 위해 기존 긴 머리를 지우고 다시 그릴 때, `edithere:back_backHairBelowCapWide_94` 레이어의 작업 결과물을 복사하여 사용하는 과정에서 **구체적인 주의사항이나 추가적인 수정 방법은 명시되어 있지 않습니다.** 문서에서 안내하는 절차는 다음과 같이 간단합니다: 1. `edithere:back_backHairBelowCapWide_94` 레이어에서 두상에 맞게 눌린 머 [scores] | [judge_reason] | [source_doc] | edithere:back_backHair_91, edithere:back_backHairBelowCapWide_94, edithere:back_backHairBelowCapNarrow_95 레이어에 이미지 작업을 합니다. 1. edithere:back_backHair_91에 'Pencil tool'로 기본 모양을 검정색으로 그린 뒤 색상을 변경하고, 세부 헤어 모양을 그립니다. 2. edithere:back_backHairBelowCapWide_94 레이어에 눌린 머리를 두상에 맞게 지워줍니다. 3. 2번을 복사하여 edit
[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | WorldShopService의 SetProcessPurchaseCallback 메서드에서 전달되는 purchaseInfo 파라미터에는 어떤 정보들이 포함되어 있나요? [answer] | `purchaseInfo` 파라미터에는 상품 구매와 관련된 다음 정보들이 포함되어 있습니다. * `purchaseInfo.PurchaseId`: 구매 식별자 * `purchaseInfo.UserId`: 구매자 사용자 ID * `purchaseInfo.ProductId`: 구매 상품 ID * `purchaseInfo.OrderNumber`: 주문 번호 이 정보들은 `ProcessPurchase` 콜백 함수에서 사용자의 상품 지급 로직을 처리할 때 확인됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **MyShopLogic**에 포션 상품 구매에 성공하는 경우 포션 100개를 얻을 수 있도록 아래와 같이 입력합니다. `WorldShopService:SetProcessPurchaseCallback`을 활용해 상품 구매가 발생했을 때 상품을 지급합니다. 상품을 지급이 성공하면 true를, 실패하면 false를 반환해야 합니다. ```lua Method: [server only] void OnBeginPlay() { _WorldShopService:SetProcessPurchaseCallback(self.ProcessPu
[task] | code [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | WorldShopService를 이용해 '포션 아이템' 구매 성공 시 서버에서 포션 수를 100으로 설정하는 스크립트를 작성해줘. [answer] | 제공된 참고 문서에는 `WorldShopService`의 정의와 활용 예시(상점 UI 토글, 카드 클릭, 데이터 저장)가 포함되어 있지만, **상품 구매 성공 이벤트를 처리하는 구체적인 메서드, 이벤트 핸들러, 또는 프로퍼티 명세가 문서에 존재하지 않습니다.** 따라서 문서에 없는 API나 이벤트를 지어내서 코드를 작성할 수 없습니다. 문서에서는 "구매 성공한 유저는 크리에이터가 제공한 상품을 지급 받아야 한다"고만 언급하고 있으며, 이를 위해 어떤 함수를 호출해야 하는지(예: `HandlePurchaseSuccessEvent` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `WorldShopService`를 활용해 웹에서 등록한 아이템, 이용권을 구매할 수 있게 만들어봅시다. 출시하지 않은 월드에서는 상품을 출시하더라도, 실제로 판매할 수 없음을 유념하세요. # WorldShopService 등록한 상품을 월드에서 활용할 때는 `WorldShopService`를 활용해야 합니다. 구매 성공한 유저는 크리에이터가 제공한 상품을 지급 받아야 합니다. # 활용 예시 아이템과 이용권을 등록합니다. 아이템을 구매하면 즉시 포션 수를 100으로 증가시키고, 이용권을 구매한 뒤 공격을
[task] | single_turn [pass] | ⏳ 미판정 [title] | 헤어 만들기 [question] | NoCap과 WithCap 템플릿의 차이는 무엇이며, 어떤 경우에 각각을 사용해야 하나요? [answer] | NoCap과 WithCap 템플릿의 차이는 모자를 착용했을 때 헤어가 어떻게 보이는지를 기준으로 구분됩니다. **NoCap 템플릿** * **특징**: 모자를 착용해도 머리 모양이 변하지 않는 경우를 위한 템플릿입니다. * **포함 요소**: * `guide_cap_samples`: 기본 헤어로 머리 모양이 변하지 않는 모자 샘플 (vslot 3번 유형). * `edithere:back_backHair_91`: 헤어의 뒷모습을 그릴 수 있는 레이어. 앞모습에서는 별도의 레이어에 그린 긴 머리를 함께 그 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. NoCap 헤어의 뒷모습을 그릴 수 있는 레이어와 모자 샘플이 포함되어 있습니다. [모자 만들기](/docs?postId=592) vslot의 3번 유형에 해당하는 모자 샘플입니다. * **guide_cap_samples**: 기본 헤어로 머리 모양이 변하지 않는 모자 샘플이 포함되어 있습니다. * **edithere:back_backHair_91**: 헤어의 뒷모습을 그릴 수 있는 레이어입니다. 앞모습에서는 별도의 레이어에 그린 긴 머리를 함께 그려야합니다 2. WithCap 모자를 썼을 때 눌리는 헤어의
[task] | code [pass] | ⏳ 미판정 [title] | 헤어 만들기 [question] | _SpawnService:SpawnByModelId 를 이용해 지정된 모델 ID와 이름, 좌표, 부모 엔티티를 설정하여 스포인을 실행하고, _TimerService:SetTimerOnce 를 통해 3초 후 해당 스포인된 엔티티를 삭제하는 스크립트를 작성해줘 [answer] | ```lua Property: [None] Entity SpawnParent = /maps/map01/root Method: [server only] void OnBeginPlay() { local modelId = "Model_TargetID" local entityName = "TargetEntity" local spawnPos = Vector3(0, 0, 0) local spawnedEntity = _SpawnService:SpawnByModelId(modelId, entityName, [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. NoCap 헤어의 뒷모습을 그릴 수 있는 레이어와 모자 샘플이 포함되어 있습니다. [모자 만들기](/docs?postId=592) vslot의 3번 유형에 해당하는 모자 샘플입니다. * **guide_cap_samples**: 기본 헤어로 머리 모양이 변하지 않는 모자 샘플이 포함되어 있습니다. * **edithere:back_backHair_91**: 헤어의 뒷모습을 그릴 수 있는 레이어입니다. 앞모습에서는 별도의 레이어에 그린 긴 머리를 함께 그려야합니다 2. WithCap 모자를 썼을 때 눌리는 헤어의
[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | 상품 구매 처리가 성공적으로 완료되었을 때 ProcessPurchase 함수에서 반드시 true를 반환해야 하는 이유는 무엇인가요? [answer] | `ProcessPurchase` 함수에서 상품 지급이 성공적으로 완료되었을 때 `true`를 반환해야 하는 이유는, 이 반환 값이 상품 구매 처리가 정상적으로 끝났음을 시스템에 알리는 신호이기 때문입니다. 문서에 명시된 바와 같이, 상품을 지급하는 로직이 성공적으로 수행되면 `true`를, 실패하면 `false`를 반환하도록 해야 합니다. 이는 `WorldShopService:SetProcessPurchaseCallback`을 통해 등록된 콜백 함수의 표준 동작 방식입니다. `false`를 반환하면 구매 처리가 실패한 것으로 간주 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **MyShopLogic**에 포션 상품 구매에 성공하는 경우 포션 100개를 얻을 수 있도록 아래와 같이 입력합니다. `WorldShopService:SetProcessPurchaseCallback`을 활용해 상품 구매가 발생했을 때 상품을 지급합니다. 상품을 지급이 성공하면 true를, 실패하면 false를 반환해야 합니다. ```lua Method: [server only] void OnBeginPlay() { _WorldShopService:SetProcessPurchaseCallback(self.ProcessPu
[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | WorldShopService를 통해 구매가 완료된 유저에게 상품을 지급할 때, 아이템과 이용권은 어떤 식으로 처리해야 하나요? [answer] | WorldShopService를 활용해 상품을 구매할 때, 아이템과 이용권은 구매 완료 이벤트에서 각각 다른 방식으로 처리해야 합니다. 1. **아이템(Item)**: * 구매가 완료되면 **즉시** 상품을 지급해야 합니다. * 예시에서는 아이템 구매 시 유저의 포션 수를 즉시 100으로 증가시키는 방식으로 처리했습니다. 2. **이용권(Pass)**: * 구매가 완료되면 이용권 보유 상태(또는 유효 여부)를 기록해 두어야 합니다. * 이후 특정 조건(예시에서는 '공격' 버튼 클릭) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `WorldShopService`를 활용해 웹에서 등록한 아이템, 이용권을 구매할 수 있게 만들어봅시다. 출시하지 않은 월드에서는 상품을 출시하더라도, 실제로 판매할 수 없음을 유념하세요. # WorldShopService 등록한 상품을 월드에서 활용할 때는 `WorldShopService`를 활용해야 합니다. 구매 성공한 유저는 크리에이터가 제공한 상품을 지급 받아야 합니다. # 활용 예시 아이템과 이용권을 등록합니다. 아이템을 구매하면 즉시 포션 수를 100으로 증가시키고, 이용권을 구매한 뒤 공격을
[task] | code [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | ShopOpenBtn의 HandleButtonClickEvent에서 MiniShop 엔티티의 Enable 상태를 토글하는 OpenShop 메서드를 구현하는 스크립트를 작성해줘. [answer] | `ShopOpenBtn`에 추가할 스크립트입니다. `_EntityService:GetEntityByPath`로 `/ui/DefaultGroup/MiniShop` 경로의 엔티티를 가져오고, `Enable` 프로퍼티 값을 확인하여 `SetEnable` 메서드로 상태(켜기/끄기)를 전환하도록 구현했습니다. ```lua Method: [client only] void OpenShop() { local Shop = _EntityService:GetEntityByPath("/ui/DefaultGroup/MiniShop") [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `WorldShopService`를 활용해 웹에서 등록한 아이템, 이용권을 구매할 수 있게 만들어봅시다. 출시하지 않은 월드에서는 상품을 출시하더라도, 실제로 판매할 수 없음을 유념하세요. # WorldShopService 등록한 상품을 월드에서 활용할 때는 `WorldShopService`를 활용해야 합니다. 구매 성공한 유저는 크리에이터가 제공한 상품을 지급 받아야 합니다. # 활용 예시 아이템과 이용권을 등록합니다. 아이템을 구매하면 즉시 포션 수를 100으로 증가시키고, 이용권을 구매한 뒤 공격을
[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | ShopOpenBtn 스크립트에서 _EntityService:GetEntityByPath("/ui/DefaultGroup/MiniShop") 경로가 틀리면 어떤 문제가 발생하나요? [answer] | `_EntityService:GetEntityByPath("/ui/DefaultGroup/MiniShop")` 경로가 실제 월드에 존재하지 않는 엔티티의 경로와 일치하지 않으면, `GetEntityByPath`는 해당 엔티티를 찾을 수 없으므로 `nil`을 반환합니다. 이후 `OpenShop()` 메서드 내에서 반환된 값(여기서 `Shop`)을 사용하여 `Shop.Enable`을 확인하거나 `Shop:SetEnable(...)`을 호출하게 됩니다. `Shop`이 `nil` 상태이기 때문에, `nil` 값에 프로퍼티에 접근하거나 메 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `WorldShopService`를 활용해 웹에서 등록한 아이템, 이용권을 구매할 수 있게 만들어봅시다. 출시하지 않은 월드에서는 상품을 출시하더라도, 실제로 판매할 수 없음을 유념하세요. # WorldShopService 등록한 상품을 월드에서 활용할 때는 `WorldShopService`를 활용해야 합니다. 구매 성공한 유저는 크리에이터가 제공한 상품을 지급 받아야 합니다. # 활용 예시 아이템과 이용권을 등록합니다. 아이템을 구매하면 즉시 포션 수를 100으로 증가시키고, 이용권을 구매한 뒤 공격을
[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | ItemSlot 컴포넌트의 ItemID 프로퍼티에 World Shop Viewer에서 복사한 ID를 대입하지 않으면 어떤 오류가 발생합니까? [answer] | 제공된 참고 문서에는 `ItemID` 프로퍼티에 World Shop Viewer에서 복사한 ID를 대입하지 않았을 때 발생하는 구체적인 오류 메시지나 시스템 반응에 대한 정보가 포함되어 있지 않습니다. 문서에는 World Shop Viewer의 컨텍스트 메뉴에서 'Copy ID'를 선택하여 복사한 ID를 ItemSlot 컴포넌트의 `ItemID` 프로퍼티에 추가해야 한다고만 안내하고 있으며, 이를 누락했을 때의 결과나 오류 사항에 대해서는 설명하고 있지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상품 구매에 성공했을 때 포션 개수와 이용권 보유 여부를 확인할 수 있는 ui를 만들어봅시다. 1. **UI 에디터 - DefaultGroup - MyPotionInfo** 이미지 엔티티를 배치합니다. 2. 하위에 이미지와 텍스트 엔티티를 배치하고, 아래의 그림처럼 이름을 변경합니다. #### 상품 정보를 구매창에 불러오기 1. 새로운 **ItemSlot** 스크립트 컴포넌트를 생성하고 **Item, Pass UI엔티티**에 추가합니다. 2. **ItemSlot** 컴포넌트 스크립트 에디터 창을 열고, 프로퍼티를 추가합니다.
[task] | code [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | 주어진 문서에는 구체적인 mLua API 명세(서비스 이름, 메서드 시그니처, 이벤트 핸들러 등)가 포함되어 있지 않으며, 메이커 에디터에서의 설정 팁과 참고 가이드 링크만 제시되어 있습니다. 따라서 문서에 명시된 API를 활용한 mLua 코딩 과제를 만들 수 없습니다. [answer] | 제시된 참고 문서에는 mLua 스크립트 컴포넌트에서 사용할 수 있는 구체적인 API 명세(서비스 이름, 메서드 시그니처, 이벤트 핸들러 등)가 포함되어 있지 않습니다. 문서에는 유료화 월드 숍 서비스 활용 시 테스트 유저를 통한 소유권 확인 팁과, 확률형 콘텐츠 제공 시 확률 정보 공개 가이드 준수 의무에 대한 안내 및 관련 문서 링크만 제시되어 있습니다. 따라서 해당 문서에 명시된 API를 활용한 mLua 코딩 과제를 만들 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | > **Tip** > 구매한 유저만 소유할 수 있는지 이용권 출시 전 반드시 확인해야 합니다. > 메이커에서 테스트용 유저를 추가해 이용권을 구매한 사람만 소유할 수 있는지 확인 후 월드 출시하기를 권장합니다. ##### 참고 가이드 ‘유료’ 확률형 콘텐츠를 제공하는 경우 확률 정보 공개 가이드에 따라 콘텐츠 사용 전 사용자에게 고지해야 할 의무가 있습니다. [확률 정보 공개](/docs/?postId=667)를 참고해 상품을 제작하길 바랍니다. * [상품 등록하기](/docs?postId=581) * [상품 관리하기](/doc
[task] | two_turn [pass] | ⏳ 미판정 [title] | 헤어 만들기 [question] | 아바타 헤어 아이템을 제작할 때, 짧은 헤어와 긴 헤어의 구조적 차이점과 필수적인 사전 준비 사항(Photoshop 및 PSD 파일)에 대해 설명해 주세요. [answer] | 아바타 헤어 아이템을 제작할 때 짧은 헤어와 긴 헤어의 구조적 차이점, 그리고 필수적인 사전 준비 사항은 다음과 같습니다. **1. 짧은 헤어와 긴 헤어의 구조적 차이점** 문서에 따르면 헤어는 크게 **짧은 헤어**와 **긴 헤어**로 구분됩니다. 두 종류의 구체적인 구조적 차이(예: 레이어 구성, 시트 크기 등)에 대한 상세 설명은 문서에 포함되어 있지 않습니다. 다만, 모든 헤어를 제작할 때 아바타의 발을 기준으로 최대 **120x120** 픽셀 범위 내에서 제작할 것을 권장하고 있습니다. **2. 필수적인 사전 준비 사항 [followup] | `case1.front`, `case2.front_proneStab`, `case3.back` 폴더 각각의 용도와 보라색 레이어의 역할이 구체적으로 어떻게 다른지, 그리고 회색 레이어 중 `data:use_zmap_preset1`이 아바타 이미지 층위 구조에서 어떤 기능을 하는지 알려주세요. [followup_answer] | 참고 문서를 기준으로 각 폴더의 용도와 `data:use_zmap_preset1`의 기능은 다음과 같습니다. ### 노란색 레이어 폴더 용도 노란색 레이어는 크리에이터가 실제 헤어를 그리는 작업 영역으로, 아바타의 다양한 자세와 각도에 맞춰 헤어를 표현하기 위해 3개의 폴더로 나뉘어 있습니다. 1. **case1.front**: 헤어의 **앞모습** 작업을 위한 폴더입니다. 2. **case2.front_proneStab**: 아바타가 **엎드려 있을 때의 헤어** 작업을 위한 폴더입니다. 3. **case3.back** [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 헤어 제작 방법을 알아봅시다. 기본 헤어의 색상을 변경하거나, 새롭게 그릴 수 있습니다. 헤어는 복잡한 구조로 바지나 신발 아이템 제작에 익숙해진 후 작업하는 걸 권장합니다. [아바타 아이템 제작의 기본 개념](/docs?postId=588%7B%22target%22:%22_self%22%7D)을 참고해 아바타의 기본 개념을 먼저 숙지하길 바랍니다. # 사전 준비 아이템 제작을 위해선 Adobe Photoshop이 필요합니다. 해당 소프트웨어를 설치한 후 아래 파일을 받아 엽니다. $$attachFile
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | `purchaseInfo`에서 접근 가능한 필드와 유효성 검사 실패 시 로그에 포함된 정보를 표로 정리하세요. [answer] | 제공된 문서 내용을 바탕으로 `purchaseInfo`에서 접근 가능한 필드와 유효성 검사 실패 시 기록되는 로그 정보를 정리하면 다음과 같습니다. ### 1. `purchaseInfo`에서 접근 가능한 필드 문서의 예제 코드에서 직접 참조된 필드만 나열합니다. | 필드 이름 | 설명 (문서 근거) | | :--- | :--- | | `purchaseInfo.UserId` | 사용자 식별자. `_UserService:GetUserEntityByUserId` 호출 시 사용 | | `purchaseInfo.PurchaseId` | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **MyShopLogic**에 포션 상품 구매에 성공하는 경우 포션 100개를 얻을 수 있도록 아래와 같이 입력합니다. `WorldShopService:SetProcessPurchaseCallback`을 활용해 상품 구매가 발생했을 때 상품을 지급합니다. 상품을 지급이 성공하면 true를, 실패하면 false를 반환해야 합니다. ```lua Method: [server only] void OnBeginPlay() { _WorldShopService:SetProcessPurchaseCallback(self.ProcessPu
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | 이용권 출시 전 반드시 확인해야 할 소유권 검증 사항과 메이커에서 권장하는 테스트 절차를 3문장 이내로 요약해 주세요. [answer] | 구매한 유저만 소유할 수 있는지 이용권 출시 전 반드시 확인해야 합니다. 메이커에서 테스트용 유저를 추가해 이용권을 구매한 사람만 소유할 수 있는지 확인한 후 월드를 출시하는 것이 권장됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | > **Tip** > 구매한 유저만 소유할 수 있는지 이용권 출시 전 반드시 확인해야 합니다. > 메이커에서 테스트용 유저를 추가해 이용권을 구매한 사람만 소유할 수 있는지 확인 후 월드 출시하기를 권장합니다. ##### 참고 가이드 ‘유료’ 확률형 콘텐츠를 제공하는 경우 확률 정보 공개 가이드에 따라 콘텐츠 사용 전 사용자에게 고지해야 할 의무가 있습니다. [확률 정보 공개](/docs/?postId=667)를 참고해 상품을 제작하길 바랍니다. * [상품 등록하기](/docs?postId=581) * [상품 관리하기](/doc
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | PlayerReward 컴포넌트의 프로퍼티 선언부만 추출하여 ```lua 코드 블록으로만 출력하세요. [answer] | ```lua Property: [None] TextComponent PotionValue = /ui/DefaultGroup/MyPotionInfo/PotionValue [Sync] number Potion= 0 [None] TextComponent PotionValue = /ui/DefaultGroup/MyPotionInfo/PassValue [Sync] boolean HasPass = false ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상품이 구매한 유저에게 반영될 수 있도록 만들어 봅시다. 1. 새로운 **PlayerReward** 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 아래와 같이 프로퍼티를 추가합니다. ```lua Property: [None] TextComponent PotionValue = /ui/DefaultGroup/MyPotionInfo/PotionValue [Sync] number Potion= 0 [None] TextCompone
[task] | two_turn [pass] | ⏳ 미판정 [title] | 배지 등록하기 [question] | 메이플스토리 월드 공식 홈페이지와 메이커(Maker) 중 어느 곳에서 배지를 등록해야 하는지, 두 방식의 절차적 차이와 공통점은 무엇인가요? [answer] | 메이플스토리 월드에서는 배지 등록을 **공식 홈페이지** 또는 **메이커(Maker)** 중 어느 곳에서든 수행할 수 있습니다. 두 방식의 화면과 절차는 동일하며, 크리에이터가 선호하는 방식을 선택해 사용할 수 있습니다. ### 공통점 1. **필수 입력 항목**: 두 방식 모두 배지 등급, 이름, 이미지(섬네일), 획득 기한을 설정해야 합니다. 2. **등록 후 상태**: 등록이 완료된 배지는 모두 **미출시** 상태로 생성됩니다. 3. **배지 등급 구분**: 노멀, 레어, 에픽 3가지 등급을 크리에이터가 직접 정의하여 지정합 [followup] | 메이커의 Badge Viewer에서 'Create New Badge'를 통해 등록한 직후 배지의 초기 상태는 무엇이며, 이 상태에서 유저가 배지를 획득할 수 있는 상태가 되려면 어떤 추가 조작이 필요한가요? [followup_answer] | 메이커의 Badge Viewer에서 'Create New Badge'를 통해 배지를 등록한 직후 배지의 초기 상태는 **미출시**입니다. 이 상태에서 유저가 배지를 획득할 수 있으려면 크리에이터가 배지의 **출시 여부**를 **출시**로 변경하는 추가 조작이 필요합니다. * **미출시 상태**: 웹 상점 및 월드 상품 리스트에서 제외되고 판매할 수 없으며, 이미 배지를 보유한 유저의 배지 목록에서도 표시되지 않습니다. * **출시 상태**: 배지를 정상적으로 출시하여 유저가 획득할 수 있는 상태로 만듭니다. 참고로, 그 [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 배지는 크리에이터가 설정한 특정 미션을 달성할 때 이용자가 획득할 수 있는 업적을 의미합니다. 배지는 유저의 달성 목표를 보여주기 위해 사용하거나, 수집 욕구를 촉발해 월드를 끊임없이 즐길 수 있게 만드는 용도로 사용합니다. # 배지 등록하기 배지를 등록하는 방법은 두 가지입니다. 메이플스토리 월드 [공식 홈페이지](https://maplestoryworlds.nexon.com/) 혹은 메이커 내에서 등록이 가능합니다. 등록 화면과 절차는 동일하므로 크리에이터가 선호하는 곳에서 배지를 등록할 수 있습니다.
[task] | two_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | `WorldShopService`의 상품 구매 성공 시 상품 지급 로직은 어떻게 구현하나요? [answer] | `WorldShopService`의 상품 구매 성공 시 상품 지급 로직은 `SetProcessPurchaseCallback` 메서드를 통해 콜백 함수를 등록하고, 해당 콜백 함수에서 상품 지급 처리를 수행하는 방식으로 구현합니다. 구체적인 구현 절차는 다음과 같습니다. 1. **콜백 등록**: `OnBeginPlay` 라이프사이클 메서드에서 `_WorldShopService:SetProcessPurchaseCallback`을 호출하여 상품 구매 처리 함수(예: `ProcessPurchase`)를 등록합니다. 2. **구매 정 [followup] | 지급이 성공하면 `true`, 실패하면 `false`를 반환해야 하는 `ProcessPurchase` 콜백 함수의 구체적인 코드 예시를 알려주세요. [followup_answer] | `ProcessPurchase` 콜백 함수는 상품 구매가 발생했을 때 상품을 지급하고, 지급 성공 시 `true`, 실패 시 `false`를 반환해야 합니다. 아래는 포션 상품과 패스 상품을 지급하는 구체적인 코드 예시입니다. ```lua Method: [server only] void OnBeginPlay() { _WorldShopService:SetProcessPurchaseCallback(self.ProcessPurchase) } [server only] boolean ProcessPurchase(any purcha [scores] | [judge_reason] | [source_doc] | **MyShopLogic**에 포션 상품 구매에 성공하는 경우 포션 100개를 얻을 수 있도록 아래와 같이 입력합니다. `WorldShopService:SetProcessPurchaseCallback`을 활용해 상품 구매가 발생했을 때 상품을 지급합니다. 상품을 지급이 성공하면 true를, 실패하면 false를 반환해야 합니다. ```lua Method: [server only] void OnBeginPlay() { _WorldShopService:SetProcessPurchaseCallback(self.ProcessPu
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | 이용권 보유 시 공격 이벤트 핸들러에서 포션이 추가 지급되는 조건을 3문장 이내로 설명하세요. [answer] | 스クリプト가 서버에서 실행되어야 하며, 현재 캐릭터가 이용권을 보유하고 있어야 합니다. 발생한 액션 이름이 "Attack"과 일치해야 합니다. 이 두 조건을 모두 만족할 때 포션 15개가 추가 지급됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상품이 구매한 유저에게 반영될 수 있도록 만들어 봅시다. 1. 새로운 **PlayerReward** 컴포넌트를 생성하고, **DefaultPlayer**에 추가합니다. 2. 아래와 같이 프로퍼티를 추가합니다. ```lua Property: [None] TextComponent PotionValue = /ui/DefaultGroup/MyPotionInfo/PotionValue [Sync] number Potion= 0 [None] TextCompone
[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | 유료화 월드 숍 서비스에서 확률형 상품을 판매할 때 확률 정보 고지 의무가 적용되는 시점이 언제인가요? [answer] | 유료 확률형 콘텐츠를 제공하는 경우, 콘텐츠 사용 전 사용자에게 확률 정보를 고지해야 할 의무가 있습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | > **Tip** > 구매한 유저만 소유할 수 있는지 이용권 출시 전 반드시 확인해야 합니다. > 메이커에서 테스트용 유저를 추가해 이용권을 구매한 사람만 소유할 수 있는지 확인 후 월드 출시하기를 권장합니다. ##### 참고 가이드 ‘유료’ 확률형 콘텐츠를 제공하는 경우 확률 정보 공개 가이드에 따라 콘텐츠 사용 전 사용자에게 고지해야 할 의무가 있습니다. [확률 정보 공개](/docs/?postId=667)를 참고해 상품을 제작하길 바랍니다. * [상품 등록하기](/docs?postId=581) * [상품 관리하기](/doc
[task] | code [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | MiniShop 하위의 Item과 Pass 엔티티를 _EntityService:GetEntityByPath로 참조하여 UI를 제어하는 스크립트를 작성해줘. [answer] | `MiniShop` 하위의 `Item`과 `Pass` 엔티티를 참조하여 상점 UI를 열고 닫는 스크립트는 아래처럼 작성할 수 있습니다. 참고 문서의 예시에서는 `_EntityService:GetEntityByPath`로 `MiniShop`을 가져온 후, `GetChildByName` 메서드를 사용해 하위 엔티티를 접근하는 방식을 사용하고 있습니다. ```lua Method: [client only] void OpenShop() { local Shop = _EntityService:GetEntityByPath("/ui/De [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `WorldShopService`를 활용해 웹에서 등록한 아이템, 이용권을 구매할 수 있게 만들어봅시다. 출시하지 않은 월드에서는 상품을 출시하더라도, 실제로 판매할 수 없음을 유념하세요. # WorldShopService 등록한 상품을 월드에서 활용할 때는 `WorldShopService`를 활용해야 합니다. 구매 성공한 유저는 크리에이터가 제공한 상품을 지급 받아야 합니다. # 활용 예시 아이템과 이용권을 등록합니다. 아이템을 구매하면 즉시 포션 수를 100으로 증가시키고, 이용권을 구매한 뒤 공격을
[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | UI에 상품 구매 여부를 반영하기 위해 서버에서 클라이언트로 정보를 전달하는 과정은 어떻게 이루어지나요? [answer] | 제공된 참고 문서에는 "UI에 상품 구매 여부 반영하기"라는 제목의 섹션이 존재하지만, 실제 문서 내용에는 서버에서 클라이언트로 정보를 전달하여 UI를 업데이트하는 구체적인 코드나 API(예: 클라이언트 이벤트 발생, 데이터 동기화 메서드 등)가 포함되어 있지 않습니다. 문서에 있는 내용은 다음과 같습니다: 1. `WorldShopService:SetProcessPurchaseCallback`을 사용하여 서버에서 상품 구매 처리(`ProcessPurchase`)를 수행하는 로직입니다. 2. `ProcessPurchase` 내부에서 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **MyShopLogic**에 포션 상품 구매에 성공하는 경우 포션 100개를 얻을 수 있도록 아래와 같이 입력합니다. `WorldShopService:SetProcessPurchaseCallback`을 활용해 상품 구매가 발생했을 때 상품을 지급합니다. 상품을 지급이 성공하면 true를, 실패하면 false를 반환해야 합니다. ```lua Method: [server only] void OnBeginPlay() { _WorldShopService:SetProcessPurchaseCallback(self.ProcessPu
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 배지 관리하기 [question] | Badge Viewer의 주요 콘텍스트 메뉴 중 'Copy Badge ID', 'Create New Badge', 'Refresh Viewer' 메뉴의 설명만 단계별 번호 목록으로 출력하세요. [answer] | 1. **Copy Badge ID**: 등록한 배지의 ID를 복사합니다. 2. **Create New Badge**: 새로운 배지를 생성합니다. 3. **Refresh Viewer**: 배지 목록을 새로고침 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 배지 뷰어와 활용 방법, 배지 상태별 기능 제한에 대해 알아봅시다. # Badge Viewer 메이커에서 배지를 등록하고, 관리할 수 있는 창입니다. 등록한 배지는 배지 등급에 따라 각각의 폴더에 자동으로 분류됩니다. 주요 콘텍스트 메뉴는 아래와 같습니다. | 메뉴 이름 | 설명 | | ----- | --- | | Copy Badge ID | 등록한 배지의 ID를 복사합니다. | | Copy Badge Thumbnail RUID | 등록한 배지의 섬네일 RUID를 복사합니다. | | Create New
[task] | single_turn [pass] | ⏳ 미판정 [title] | 월드 숍 서비스 활용하기 [question] | PurchaseBtn 엔티티에 ButtonClickEvent를 연결할 때 OnBeginPlay 함수 내에서 GetChildByName을 사용하여 참조하는 것이 권장되는 이유는 무엇인가요? [answer] | 제공된 참고 문서에는 `OnBeginPlay` 함수 내에서 `GetChildByName`을 사용하여 `PurchaseBtn` 엔티티를 참조하는 것이 권장되는 이유에 대한 설명이나 근거가 포함되어 있지 않습니다. 문서에서는 단순히 `ItemSlot` 컴포넌트의 `OnBeginPlay` 메서드 예제 코드 내에서 `self.Entity:GetChildByName("PurchaseBtn")`를 호출하여 `self.PurchaseBtn`에 할당하고, 이후 `ConnectEvent`를 통해 `ButtonClickEvent`를 연결하는 코드를 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 상품 구매에 성공했을 때 포션 개수와 이용권 보유 여부를 확인할 수 있는 ui를 만들어봅시다. 1. **UI 에디터 - DefaultGroup - MyPotionInfo** 이미지 엔티티를 배치합니다. 2. 하위에 이미지와 텍스트 엔티티를 배치하고, 아래의 그림처럼 이름을 변경합니다. #### 상품 정보를 구매창에 불러오기 1. 새로운 **ItemSlot** 스크립트 컴포넌트를 생성하고 **Item, Pass UI엔티티**에 추가합니다. 2. **ItemSlot** 컴포넌트 스크립트 에디터 창을 열고, 프로퍼티를 추가합니다.
[task] | instruction_following [pass] | ⏳ 미판정 [title] | 배지 관리하기 [question] | 배지 상태별 기능 제한 중 '제재 중' 상태일 때 월드에서 정보 조회, 실제 획득, 공식 홈페이지 배지 노출의 허용 여부를 표로 정리해서 출력하세요. [answer] | 제재 중 상태일 때의 기능 제한은 다음과 같습니다. | 항목 | 허용 여부 | | --- | --- | | 월드에서 정보 조회 | 가능 | | 실제 획득 | 가능 (획득 시 제재 중 표시) | | 공식 홈페이지 배지 노출 | 노출 안 됨 | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 배지 뷰어와 활용 방법, 배지 상태별 기능 제한에 대해 알아봅시다. # Badge Viewer 메이커에서 배지를 등록하고, 관리할 수 있는 창입니다. 등록한 배지는 배지 등급에 따라 각각의 폴더에 자동으로 분류됩니다. 주요 콘텍스트 메뉴는 아래와 같습니다. | 메뉴 이름 | 설명 | | ----- | --- | | Copy Badge ID | 등록한 배지의 ID를 복사합니다. | | Copy Badge Thumbnail RUID | 등록한 배지의 섬네일 RUID를 복사합니다. | | Create New