← 목록

mLua · Nemotron SDG 질문-응답 (SFT)

총 21,567개 · 페이지 343/719
🔀 랜덤
불러오는 중…

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | 제공된 `HandleUserEnterEvent` 코드에서 `mapComponent`를 얻는 경로와 `playersArr`를 순회할 때 출력되는 로그 형식을 표로 정리하세요. [answer] | 제공된 `HandleUserEnterEvent` 코드에서 `mapComponent`를 얻는 경로와 `playersArr` 순회 시 출력되는 로그 형식은 다음과 같습니다. | 항목 | 내용 | | :--- | :--- | | **mapComponent 획득 경로** | `_EntityService:GetEntityByPath("/maps/map01").MapComponent` | | **로그 출력 형식** | `"PlayerName : CurrentMap = " .. player.Name .. " : " .. player.Curre [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) {

[task] | code [pass] | ⏳ 미판정 [title] | 맵 레이어 [question] | Layer2에 배치된 연두 타일에 착지하는 순간 플레이어 아바타의 레이어가 Layer2로 변경됨을 감지하여 시각적 효과(예: 색상 변경)를 트리거하는 스크립트를 작성해줘. [answer] | 제시된 참고 문서에는 맵 레이어의 작동 원리(타일 레이어에 따라 아바타의 시각적 레이어가 변경됨)와 mLua의 기본 문법(컴포넌트 접근, 서비스 사용법 등)은 설명하고 있습니다. 하지만, **아바타가 특정 레이어(Layer2)로 변경된다는 사실 자체를 직접 감지하는 이벤트(예: `HandleLayerChangeEvent`)나 아바타의 현재 속해있는 레이어 값을 조회하는 API(예: `GetLayer()` 등)가 문서에 명시되어 있지 않습니다.** mLua API 문서에 없는 이벤트나 메서드를 지어내어 코드를 작성할 수 없으므로, [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록

[task] | code [pass] | ⏳ 미판정 [title] | 텔레포트 [question] | 특정 시간마다 캐릭터를 다른 맵으로 이동시키는 기능을 만들어 보면서 `TeleportService`의 `TeleportToEntityPath` 함수 사용법을 알아봅시다. [answer] | 특정 시간마다 캐릭터를 다른 맵으로 이동시키는 기능은 `TeleportService`의 `TeleportToEntityPath` 함수를 사용하여 구현할 수 있습니다. 이 함수는 지정된 엔티티 경로로 캐릭터를 텔레포트하는 역할을 합니다. 주어진 참고 문서에는 `TeleportToEntityPath` 함수의 구체적인 매개변수 목록이나 호출 예제 코드가 포함되어 있지 않아, 이 함수의 정확한 사용법(매개변수 형식 등)은 문서에 명시되어 있지 않습니다. 따라서 문서에 근거하여 해당 함수의 호출 코드를 작성하는 것은 불가능합니다. 다만, [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 특정 시간마다 캐릭터를 다른 맵으로 이동시키는 기능을 만들어 보면서 `TeleportService`의 `TeleportToEntityPath` 함수 사용법을 알아봅시다. ##### 참고 API Reference [TeleportService](/apiReference/Services/TeleportService) # 이동할 맵 만들기 먼저 캐릭터가 이동할 맵을 만듭니다. 1. **Window - Map List** 창을 엽니다. 2. **Map List** 창에서 **[새 맵 만들기]** 버튼을 클릭

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | `UserEnterEvent` 핸들러 내부에서 `UserId`를 사용하여 플레이어 엔티티를 직접 조회하는 코드만 출력하고, 나머지 설명은 주석으로 작성하세요. [answer] | ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------------------------------------------- -- UserId를 이용해 해당 플레이어 엔티티를 직접 조회합니다. local EnteredPlayerEntity = _UserService:GetUserEnti [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) {

[task] | single_turn [pass] | ⏳ 미판정 [title] | 텔레포트 [question] | Workspace에서 DefaultPlayer에 Teleport 컴포넌트를 추가하는 단계에서 컴포넌트 이름을 변경하지 않고 기본 이름으로 두면 스크립트 실행에 문제가 발생하나요? [answer] | 컴포넌트 이름을 변경하지 않고 기본 이름으로 두어도 스크립트 실행에 문제가 발생하지 않습니다. 제공된 가이드는 컴포넌트 이름을 `Teleport`로 설정하는 것을 권장하는 절차로 제시하고 있지만, 이는 스크립트 내부 로직이나 API 호출과 직접적인 연관이 없는 편집 편의성 목적의 단계입니다. mLua 스크립트에서 서비스(`_TeleportService` 등)나 다른 엔티티를 참조할 때 컴포넌트 자체의 이름이 아니라 `self.Entity` (현재 스크립트가 붙어있는 엔티티)나 엔티티의 경로(Path)를 사용하므로, 컴포넌트 이름이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다.

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService의 UserDisconnectEvent와 UserReconnectEvent 핸들러를 모두 구현하여 각각 이벤트 발생 시 UserId와 TimeNetworkClosed를 포맷팅하여 로그로 기록하는 스크립트를 작성해줘 [answer] | `UserService`의 `UserDisconnectEvent`와 `UserReconnectEvent` 핸들러를 모두 포함하여, 이벤트 발생 시 `UserId`와 `TimeNetworkClosed`를 포맷팅하여 로그로 기록하는 스크립트는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserDisconnectEvent (UserDisconnectEvent event) { local UserId = event.UserId local TimeNetworkC [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 유저의 네트워크가 불안정하면 접속이 끊길 수 있습니다. 또한 다시 재접속할 수도 있습니다. 이와 같이 접속 끊김/재접속 이벤트가 `UserService`에서 발생합니다. 스크립트 컴포넌트에서 해당 이벤트 핸들러를 추가하여 유저의 접속 끊김 또는 재접속 시점에 별도 처리를 추가할 수 있습니다. ### UserDisconnectEvent 유저의 네트워크 접속이 불안정하여 끊겼을 때 발생하는 이벤트입니다. 스크립트 컴포넌트에서 해당 이벤트 핸들러를 추가하여 접속이 끊겼을 때 처리를 추가할 수 있습니다. 다음은 접속이 끊긴 **Us

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserEnterEvent와 UserLeaveEvent의 매개변수에서 얻을 수 있는 정보의 차이점과 각각의 사용 시기는 어떻게 다른가요? [answer] | `UserEnterEvent`와 `UserLeaveEvent`의 매개변수에서 직접 얻을 수 있는 정보는 **완전히 동일**합니다. 두 이벤트 모두 `event.UserId`라는 단일 속성만 제공하며, 여기서 해당 유저의 고유 식별자(UserId)만 추출할 수 있습니다. 문서에 따르면 두 이벤트 핸들러에서 추가로 다른 정보를 직접 가져올 수 있는 필드(예: 이름, 좌표 등)는 명시되어 있지 않습니다. 두 이벤트의 차이점은 **발생 시점(사용 시기)**에 있습니다. 1. **UserEnterEvent**: 유저가 월드에 **입장* [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `UserService`를 통해 상황별로 **UserEntity**를 받는 방법을 알아봅니다. 간단한 스크립트 예제를 통해 `UserService`가 제공하는 기능을 알아보겠습니다. # 들어가기에 앞서 다음 가이드를 먼저 학습하면 본 과정을 이해하는 데 많은 도움이 됩니다. [서버와 클라이언트](/docs?postId=207) [실행 제어](/docs?postId=210) [Event System](/docs?postId=73) [Entity Event System](/docs?postId=176) # 예

[task] | two_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | 특정 맵에 있는 유저만 필터링해서 가져오고 싶어요 [answer] | 특정 맵에 있는 유저만 필터링해서 가져오려면 `UserService`의 `GetUsersByMapName()` 또는 `GetUsersByMapComponent()` 함수를 사용하면 됩니다. 두 함수 모두 특정 맵에 존재하는 유저 엔티티들을 배열로 리턴하며, 반환된 배열은 `for` 반복문을 통해 개별 유저 엔티티를 순회할 수 있습니다. ### 1. 맵 이름으로 필터링: `GetUsersByMapName()` 맵의 이름(스트링)을 매개변수로 넘겨 해당 맵에 있는 유저들을 가져옵니다. 맵 이름은 `_EntityService:GetE [followup] | `map01`에 있는 모든 유저 엔티티를 배열로 받아와서 이름과 현재 위치 맵을 출력하는 `GetUsersByMapName()` 활용 코드를 보여주세요. [followup_answer] | `GetUsersByMapName()` 함수를 활용하여 `map01`에 있는 모든 유저 엔티티를 배열로 받아와서 이름과 현재 위치 맵을 출력하는 코드는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------------------------------------------- [scores] | [judge_reason] | [source_doc] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId --------------------

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService의 UserEntities와 Users 프로퍼티가 각각 어떤 타입의 데이터를 반환하는지 차이점이 뭔가요? [answer] | `UserService`의 `UserEntities`와 `Users` 프로퍼티는 반환하는 데이터의 구조와 내용이 다릅니다. **1. UserEntities** * **타입:** 사전(Dictionary) 타입 * **구조:** `Key - Value` 쌍으로 구성됩니다. * **Key:** `UserId` * **Value:** `MODEntity` (유저 엔티티 객체) * **특징:** 게임에 참여 중인 유저의 **엔티티 객체**를 직접 다루고 싶을 때 사용합니다. 예를 들어, 엔티티의 `Name [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | 유저가 맵을 이동하는 순간 GetUsersByMapName()으로 받은 배열 값이 즉시 갱신되나요, 아니면 지연이 발생하나요? [answer] | 제시된 문서에는 `GetUsersByMapName()` 함수가 맵 이동 시점에 배열 값을 즉시 갱신하는지, 아니면 지연이 발생하는지에 대한 정보가 포함되어 있지 않습니다. 문서에는 해당 함수가 특정 맵에 있는 유저 엔티티를 배열로 리턴하며, `UserEnterEvent`를 통해 유저가 들어올 때마다 호출하여 현재 해당 맵에 있는 유저 목록을 출력하는 사용 예시만 설명하고 있을 뿐, 맵 이동(포탈 통과 등) 발생 시 함수 호출 결과의 갱신 타이밍이나 지연 여부에 대한 명시적인 기술은 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId --------------------

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService의 UserEnterEvent와 UserLeaveEvent 핸들러를 구현하여 유저의 입장 및 퇴장 시점마다 UserId를 로그로 출력하는 스크립트를 작성해줘 [answer] | `UserService`의 `UserEnterEvent`와 `UserLeaveEvent` 이벤트 핸들러를 사용하여 유저 입장 및 퇴장 시 `UserId`를 로그로 출력하는 스크립트는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { local UserId = event.UserId log("User Enter! : "..UserId) } Event Handler: [service: Use [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `UserService`를 통해 상황별로 **UserEntity**를 받는 방법을 알아봅니다. 간단한 스크립트 예제를 통해 `UserService`가 제공하는 기능을 알아보겠습니다. # 들어가기에 앞서 다음 가이드를 먼저 학습하면 본 과정을 이해하는 데 많은 도움이 됩니다. [서버와 클라이언트](/docs?postId=207) [실행 제어](/docs?postId=210) [Event System](/docs?postId=73) [Entity Event System](/docs?postId=176) # 예

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService의 UserEnterEvent와 UserLeaveEvent 핸들러를 모두 구현하여, 각각의 이벤트 발생 시점마다 event.UserId를 변수로 저장한 뒤, "입장: " 또는 "퇴장: " 접두사와 함께 UserId를 연결해 로그로 출력하는 스크립트를 작성해줘 [answer] | ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { local UserId = event.UserId log("입장: " .. UserId) } Event Handler: [service: UserService] HandleUserLeaveEvent (UserLeaveEvent event) { local UserId = event.UserId log("퇴장: " .. UserId) } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `UserService`를 통해 상황별로 **UserEntity**를 받는 방법을 알아봅니다. 간단한 스크립트 예제를 통해 `UserService`가 제공하는 기능을 알아보겠습니다. # 들어가기에 앞서 다음 가이드를 먼저 학습하면 본 과정을 이해하는 데 많은 도움이 됩니다. [서버와 클라이언트](/docs?postId=207) [실행 제어](/docs?postId=210) [Event System](/docs?postId=73) [Entity Event System](/docs?postId=176) # 예

[task] | code [pass] | ⏳ 미판정 [title] | 텔레포트 [question] | Teleport 컴포넌트와 _TeleportService:TeleportToEntityPath 메서드를 활용해 _T 프로퍼티에 destinationTable이 없을 경우 기본 맵 경로 3개를 초기화하고, 3초마다 accTime을 리셋하여 캐릭터를 지정된 경로로 텔레포트하는 스크립트를 작성해줘 [answer] | 요청하신 기능을 구현하는 `Teleport` 스크립트 컴포넌트입니다. `_T` 프로퍼티를 사용하여 동기화가 필요 없는 상태(누적 시간, 텔레포트 횟수, 목적지 테이블)를 관리하며, 3초 간격으로 지정된 맵 경로로 캐릭터를 이동시킵니다. ```lua Method: [server only] void OnUpdate(number delta) { -- 프로퍼티 동기화가 필요 없으므로 _T 프로퍼티를 활용 if self._T.accTime == nil then self._T.accTime = 0 end if self. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다.

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | 특정 맵의 유저를 가져올 때 `mapName` 변수를 생성하는 방법과 반복문을 통해 데이터를 처리하는 과정을 단계별 번호 목록(1, 2, 3...)으로 정리하세요. [answer] | 특정 맵의 유저를 가져올 때 `mapName` 변수 생성과 반복문을 통한 데이터 처리 과정은 다음과 같습니다. 1. **맵 엔티티 경로로 맵 이름(`mapName`)을 추출합니다.** `_EntityService:GetEntityByPath()`를 사용하여 특정 맵(예: `/maps/map01`)의 엔티티를 찾은 후, 해당 엔티티의 `.Name` 프로퍼티를 읽어 `mapName` 변수에 저장합니다. ```lua local mapName = _EntityService:GetEntityByPath("/maps/ [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId --------------------

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | GetUserCount() 함수가 반환하는 값에는 현재 접속 중인 모든 유저가 포함되나요, 아니면 특정 맵에 있는 유저만 포함되나요? [answer] | `GetUserCount()` 함수는 현재 게임에 참여 중인 **모든 유저**의 수를 반환합니다. 이는 특정 맵에 있는 유저만 세는 것이 아닙니다. 특정 맵에 있는 유저의 수를 알고 싶다면 `GetUsersByMapName()` 또는 `GetUsersByMapComponent()`를 사용해 해당 맵의 유저 배열을 먼저 받아온 후, 그 배열의 길이를 확인하는 방식으로 처리해야 합니다. 다음은 현재 접속 중인 전체 유저 수를 출력하는 예제입니다. ```lua Event Handler: [service: UserService] Ha [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId --------------------

[task] | two_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService의 UserEntities 프로퍼티가 어떤 데이터 타입과 구조로 모든 유저 엔티티를 반환하는지 설명해 주세요 [answer] | `UserService`의 `UserEntities` 프로퍼티는 사전(Dictionary) 타입으로, 게임에 참여 중인 모든 유저 엔티티를 반환합니다. 이 데이터 구조는 **Key**와 **Value** 쌍으로 이루어져 있으며, 각 값의 의미는 다음과 같습니다. * **Key**: `UserId` * **Value**: `MODEntity` 즉, 특정 유저의 `UserId`를 키로 사용하여 해당 유저가 제어하는 `MODEntity` 객체를 조회할 수 있는 구조입니다. ```lua Event Handler: [servi [followup] | UserEntities 사전에서 특정 UserId에 해당하는 MODEntity를 직접 추출하여 그 Entity.Name을 로그로 출력하는 코드를 작성해 주세요 [followup_answer] | `UserEntities`는 `UserId`를 키(Key)로 하는 사전(Dictionary)이므로, 특정 `UserId`를 인덱스로 사용하여 해당 `MODEntity`를 직접 조회할 수 있습니다. 아래 코드는 `UserEnterEvent`가 발생했을 때, 이벤트에서 전달받은 `UserId`로 `UserEntities`에서 해당 유저의 엔티티를 추출하여 `Name`을 출력하는 예시입니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEven [scores] | [judge_reason] | [source_doc] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User

[task] | code [pass] | ⏳ 미판정 [title] | 텔레포트 [question] | Teleport 컴포넌트와 _TeleportService:TeleportToEntityPath 메서드를 활용해 _T 프로퍼티에 저장된 destinationTable 배열에서 인덱스를 순차적으로 증가시키며 5초마다 캐릭터를 다음 목적지로 이동시키는 스크립트를 작성해줘 [answer] | 요청하신 기능은 `_T` 프로퍼티에 저장된 `destinationTable`에서 인덱스를 순환하며 5초마다 캐릭터를 텔레포트하는 로직입니다. 제공된 문서의 `OnUpdate` 패턴과 `_TeleportService:TeleportToEntityPath` API 사용법을 그대로 따릅니다. ```lua Method: [server only] void OnUpdate(number delta) { -- 프로퍼티 동기화가 필요 없으므로 _T 프로퍼티를 활용 if self._T.accTime == nil then self._T [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다.

[task] | two_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService의 Users 프로퍼티를 사용하여 게임에 참여 중인 모든 유저의 UserId, Nickname, ProfileCode 정보를 순회하며 문자열로 조합하여 출력하는 예제 코드를 보여 주세요 [answer] | `UserService`의 `Users` 프로퍼티는 게임에 참여 중인 모든 유저의 `UserId`, `Nickname`, `ProfileCode` 정보를 제공합니다. 이를 순회하며 문자열로 조합하여 출력하는 예제는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId ------------------------ [followup] | Users 배열에서 Nickname이 "테스트유저"인 유저만 필터링하여 해당 유저의 ProfileCode만 로그로 출력하는 코드를 수정해 주세요 [followup_answer] | `Users` 프로퍼티는 `UserId`, `Nickname`, `ProfileCode` 정보를 포함합니다. 이를 순회하며 `Nickname`이 "테스트유저"인 경우에만 `ProfileCode`를 출력하도록 수정한 코드는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------- [scores] | [judge_reason] | [source_doc] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | HandleUserEnterEvent 안에서 _UserService:GetUserCount()를 호출했을 때 새로 들어온 유저가 이미 카운트에 포함되어 있나요? [answer] | 네, 새로 들어온 유저가 이미 카운트에 포함되어 있습니다. 문서에 제시된 예제 코드를 보면, `HandleUserEnterEvent`가 발생했을 때 즉시 `_UserService:GetUserCount()`를 호출하고 있습니다. 또한 설명 부분에 "유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제"라고 명시되어 있으며, 테스트 결과 "클라이언트를 추가할 때마다 콘솔 창에 CurrentUserCount가 증가합니다"라고 설명하고 있습니다. 이것은 이벤트 핸들러가 실행되는 시점에 해당 유저가 이미 게임에 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId --------------------

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | `_UserService.LocalPlayer` 프로퍼티를 서버 스크립트에서 호출할 수 있는 이유와 가능한 실행 공간을 3문장 이내로 설명하세요. [answer] | `_UserService.LocalPlayer`는 클라이언트에서만 유효한 내 유저 엔티티를 반환하는 프로퍼티입니다. 따라서 서버 스크립트에서 호출할 수 없으며, 반드시 클라이언트 공간에서만 사용해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **LocalPlayer**는 클라이언트에서 내 유저 엔티티를 얻을 수 있는 프로퍼티입니다. 특정 클라이언트에서 내 캐릭터라는 개념은 클라이언트에서만 유효합니다. 그러므로 서버에서는 사용할 수 없고 반드시 클라이언트에서만 사용할 수 있습니다. **UserEnterEventType**은 서버에서만 발생하기 때문에, 클라이언트에서 실행할 수 있는 함수를 하나 추가하여 유저가 게임에 들어올 때마다 내 캐릭터의 이름을 출력하는 코드를 작성해 줍니다. ```lua Method: [client] void PrintLocalPlayerNam

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService.GetUserCount() 메서드를 활용해 새 유저가 게임에 진입할 때마다 현재 접속 중인 유저의 총 수를 로그로 출력하는 스크립트를 작성해줘. [answer] | `UserService`의 `GetUserCount()` 메서드를 사용하여 유저 입장 이벤트가 발생했을 때 현재 접속 중인 유저의 총 수를 로그로 출력하는 스크립트는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent(UserEnterEvent event) { -- Parameters local UserId = event.UserId -- 현재 접속 중인 유저 수를 가져와서 로그로 출력 log("현재 접속 유저 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService.UserEntities를 이용해 새 유저가 입장할 때 모든 플레이어를 순회하며 Entity.Name을 로그로 출력하는 스크립트를 작성해줘. [answer] | 새 유저가 입장할 때마다 `UserService.UserEntities`를 통해 게임에 참여 중인 모든 유저 엔티티를 순회하여 각 플레이어의 `Entity.Name`을 로그로 출력하는 스크립트는 다음과 같습니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId ----------------------------------- [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User

[task] | single_turn [pass] | ⏳ 미판정 [title] | 텔레포트 [question] | TeleportService에서 엔티티를 다른 맵으로 옮길 때 TeleportToEntityPath 함수의 매개변수로 목적지 엔티티의 Path를 어떻게 정확히 가져와야 하나요? [answer] | `_TeleportService:TeleportToEntityPath` 함수의 두 번째 매개변수로 전달할 목적지 엔티티의 Path는 해당 엔티티가 배치된 **Workspace 경로를 직접 문자열로 입력**하여 가져옵니다. 메이플스토리 월드에서는 엔티티의 고유 경로를 `"/maps/{맵 이름}/{엔티티 이름}_{인덱스}"` 형식으로 정의합니다. 따라서 텔레포트할 대상이 되는 엔티티(예: 텔레포트 게이트, 특정 위치 오브젝트 등)를 미리 원하는 맵에 배치해 두었는지 확인한 뒤, 해당 엔티티의 정확한 경로를 스크립트의 테이블이나 변수에 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 텔레포트 [question] | 테스트 시 캐릭터가 3초마다 이동하지 않고 제자리에서 멈춰 있거나 에러가 나는 경우, OnUpdate 함수의 실행 공간([server only])이나 _T 테이블 초기화 로직 중 어느 부분을 먼저 점검해야 하나요? [answer] | 참고 문서에 제공된 정보만 근거로 답변합니다. 문서에 명시된 내용에는 `OnUpdate` 함수의 실행 공간(`[server only]`)이나 `_T` 테이블 초기화 로직 중 어느 부분을 **우선적으로** 점검해야 하는지에 대한 구체적인 디버깅 순서나 우선순위 가이드가 포함되어 있지 않습니다. 문서에 제시된 코드 구조와 동작 방식은 다음과 같습니다. 1. **실행 공간**: `OnUpdate`는 `[server only]`로 선언되어 서버에서 실행됩니다. 2. **`_T` 테이블 초기화**: * `self._T.a [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 텔레포트 [question] | 3초마다 다른 맵으로 이동하도록 설정할 때 destinationTable의 인덱스 계산 방식인 self._T.teleportCnt % 3 + 1이 어떻게 순환 이동이 되는지 설명해 주세요. [answer] | `self._T.teleportCnt % 3 + 1` 식은 모듈로 연산(Modulo)을 활용하여 목적지 목록의 인덱스가 1부터 3까지 순환하도록 만드는 계산식입니다. Lua의 모듈로 연산(`%`)은 나눗셈의 나머지를 반환합니다. `teleportCnt`가 0부터 시작하여 1씩 증가할 때의 계산 과정은 다음과 같습니다. 1. **1차 이동 (`teleportCnt` = 1):** * `1 % 3`의 나머지는 `1`입니다. * `1 + 1` = **2** * `destinationTable[2]`에 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | 특정 맵의 유저를 가져올 때 GetUsersByMapName() 함수에 넘겨야 하는 mapName 인자는 어떻게 얻어와야 하나요? [answer] | 특정 맵의 유저를 가져올 때 `GetUsersByMapName()` 함수에 넘겨야 하는 `mapName` 인자는 해당 맵 엔티티의 이름(`Name`) 프로퍼티를 통해 얻어옵니다. `_EntityService:GetEntityByPath()`를 사용하여 맵의 경로(예: `"/maps/map01"`)로 맵 엔티티를 찾은 뒤, 해당 엔티티의 `.Name` 값을 `mapName` 변수에 대입하면 됩니다. 이렇게 얻은 `mapName`을 `GetUsersByMapName()`에 전달하면 해당 맵에 있는 유저 엔티티 배열을 반환받을 수 있습 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId --------------------

[task] | single_turn [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | GetUsersByMapName() 함수가 리턴하는 배열에서 player.CurrentMap.Name을 통해 유저의 현재 위치를 확인하는 것이 정확하나요? [answer] | 네, 정확합니다. `GetUsersByMapName()` 함수는 특정 맵에 있는 유저 엔티티를 배열로 리턴하며, 이 배열에서 개별 유저 엔티티를 받아와 `player.CurrentMap.Name`을 접근하면 해당 유저가 현재 위치한 맵의 이름을 문자열로 확인할 수 있습니다. 참고 문서의 예제에서도 이를 명확히 보여줍니다. `map01`에 있는 유저를 배열로 받아온 후, 반복문(`for index, player in pairs(playersArr) do`)을 통해 각 `player`에 대해 `player.CurrentMap.Nam [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId --------------------

[task] | code [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | UserService의 UserEnterEvent 핸들러를 통해 유저가 입장할 때 event.UserId를 받아 해당 유저의 UserEntity를 조회하고, 이 엔티티의 TransformComponent 위치를 로그로 출력하는 스크립트를 작성해줘 [answer] | `UserService`의 `UserEnterEvent` 핸들러에서 `event.UserId`를 받아 해당 유저의 `UserEntity`를 조회하고, 그 엔티티의 `TransformComponent` 위치를 로그로 출력하는 스크립트는 다음과 같습니다. 참고 문서에 따르면, `UserService`는 현재 접속 중인 모든 유저 엔티티를 `Dictionary` 형태로 `_UserService.UserEntities`에서 제공합니다. 따라서 `event.UserId`를 키로 사용하여 해당 `UserEntity`를 직접 조회할 수 있습니 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 `UserService`를 통해 상황별로 **UserEntity**를 받는 방법을 알아봅니다. 간단한 스크립트 예제를 통해 `UserService`가 제공하는 기능을 알아보겠습니다. # 들어가기에 앞서 다음 가이드를 먼저 학습하면 본 과정을 이해하는 데 많은 도움이 됩니다. [서버와 클라이언트](/docs?postId=207) [실행 제어](/docs?postId=210) [Event System](/docs?postId=73) [Entity Event System](/docs?postId=176) # 예

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 맵 생성과 관리 [question] | 포탈의 TargetPortal 설정 방법을 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua -- 포탈의 TargetPortal 설정은 스크립트로 직접 수행할 수 없습니다. -- 반드시 에디터의 프로퍼티 에디터에서 TargetPortal 프로퍼티의 [◉] 버튼을 클릭하여 -- Reference 팝업 창에서 이동할 도착 포탈을 선택하는 방식으로만 설정할 수 있습니다. ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 유저 엔티티를 찾아주는 UserService [question] | 문서 예제에 포함된 `PrintLocalPlayerName` 메서드와 `HandleUserEnterEvent` 핸들러 코드를 출력하되, 로직 설명은 주석으로만 작성하세요. [answer] | ```lua Method: [client] void PrintLocalPlayerName() { -- 클라이언트에서의 내 유저를 받아옴 local MyPlayer = _UserService.LocalPlayer log("MyPlayerName : "..MyPlayer.Name) } Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = even [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **LocalPlayer**는 클라이언트에서 내 유저 엔티티를 얻을 수 있는 프로퍼티입니다. 특정 클라이언트에서 내 캐릭터라는 개념은 클라이언트에서만 유효합니다. 그러므로 서버에서는 사용할 수 없고 반드시 클라이언트에서만 사용할 수 있습니다. **UserEnterEventType**은 서버에서만 발생하기 때문에, 클라이언트에서 실행할 수 있는 함수를 하나 추가하여 유저가 게임에 들어올 때마다 내 캐릭터의 이름을 출력하는 코드를 작성해 줍니다. ```lua Method: [client] void PrintLocalPlayerNam

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