[task] | knowledge_list [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | * `UserService`는 게임에 참여 중인 모든 유저 엔티티를 사전(Dictionary) 타입의 `UserEntities` 프로퍼티로 제공하며, Key는 `UserId`이고 Value는 해당 유저의 `MODEntity`입니다. * `UserService`는 게임에 참여 중인 모든 유저의 정보(유저 ID, 닉네임, 프로필 코드)를 포함하는 `Users` 프로퍼티를 제공합니다. * `UserService`의 `GetUserCount()` 메서드는 현재 게임에 참여 중인 유저의 총 수를 반환합니다. * `UserSer [original] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User [chunk_id] | Guides:60:2
[task] | distill [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | **UserService** 게임에 참여 중인 유저 정보를 조회하는 서비스입니다. **프로퍼티** * `UserEntities`: `Dictionary<UserId, MODEntity>` * 게임에 참여 중인 모든 유저 엔티티를 반환합니다. * `Users`: `Array<UserInfo>` * 게임에 참여 중인 모든 유저의 `UserId`, `Nickname`, `ProfileCode` 정보를 반환합니다. **메서드** * `GetUserCount()`: 현재 게임에 참여 중인 유저 수를 [original] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User [chunk_id] | Guides:60:2
[task] | wikipedia [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | ## UserService의 접속 끊김 및 재접속 이벤트 처리 유저의 네트워크 상태가 불안정하면 접속이 끊기거나, 이후 다시 재접속하는 상황이 발생할 수 있습니다. 이러한 접속 끊김 및 재접속 이벤트는 `UserService`에서 발생하며, 스크립트 컴포넌트에 해당 이벤트 핸들러를 등록하면 특정 시점에 필요한 처리 로직을 실행할 수 있습니다. ### UserDisconnectEvent `UserDisconnectEvent`는 유저의 네트워크 접속이 불안정하여 끊겼을 때 발생하는 이벤트입니다. 스크립트 컴포넌트에 이 이벤트의 핸 [original] | 유저의 네트워크가 불안정하면 접속이 끊길 수 있습니다. 또한 다시 재접속할 수도 있습니다. 이와 같이 접속 끊김/재접속 이벤트가 `UserService`에서 발생합니다. 스크립트 컴포넌트에서 해당 이벤트 핸들러를 추가하여 유저의 접속 끊김 또는 재접속 시점에 별도 처리를 추가할 수 있습니다. ### UserDisconnectEvent 유저의 네트워크 접속이 불안정하여 끊겼을 때 발생하는 이벤트입니다. 스크립트 컴포넌트에서 해당 이벤트 핸들러를 추가하여 접속이 끊겼을 때 처리를 추가할 수 있습니다. 다음은 접속이 끊긴 **Us [chunk_id] | Guides:60:1
[task] | distill [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | `UserService`는 게임 내 유저 엔티티를 조회하는 API를 제공합니다. ### `GetUserCount()` 현재 게임에 참여 중인 유저 수를 리턴합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { local UserId = event.UserId local userCount = _UserService:GetUserCount() log("CurrentUserCount : "..us [original] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------- [chunk_id] | Guides:60:3
[task] | knowledge_list [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | * `_UserService:GetUserCount()` 함수는 현재 게임에 참여 중인 유저의 수를 `number` 타입으로 리턴하며, 매개변수를 받지 않습니다. * `[service: UserService]` 이벤트 핸들러인 `HandleUserEnterEvent`는 `UserEnterEvent` 타입의 `event` 매개변수를 받아, `event.UserId`로 특정 유저의 ID를 추출할 수 있습니다. * `_UserService:GetUsersByMapName(mapName)` 함수는 매개변수 `mapName`에 맵 [original] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------- [chunk_id] | Guides:60:3
[task] | diverse_qa [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | 질문: `UserService`를 통해 주로 어떤 엔티티를 받는 방법을 학습할 수 있나요? 답변: `UserService`를 통해 상황별로 **UserEntity**를 받는 방법을 알아봅니다. 질문: 본 학습 과정을 이해하기 전에 먼저 학습하면 도움이 되는 가이드는 무엇인가요? 답변: [서버와 클라이언트], [실행 제어], [Event System], [Entity Event System] 가이드를 먼저 학습하면 도움이 됩니다. 질문: 예제 진행을 위해 스크립트 컴포넌트를 생성할 때 어떤 이름을 지정하고, 어디에 추가해야 하나요 [original] | # 학습 과정 소개 `UserService`를 통해 상황별로 **UserEntity**를 받는 방법을 알아봅니다. 간단한 스크립트 예제를 통해 `UserService`가 제공하는 기능을 알아보겠습니다. # 들어가기에 앞서 다음 가이드를 먼저 학습하면 본 과정을 이해하는 데 많은 도움이 됩니다. [서버와 클라이언트](/docs?postId=207) [실행 제어](/docs?postId=210) [Event System](/docs?postId=73) [Entity Event System](/docs?postId=176) # 예 [chunk_id] | Guides:60:0
[task] | diverse_qa [title] | 텔레포트 [category] | Guides [rephrased] | 질문: 텔레포트 기능을 구현하기 위해 스크립트 컴포넌트를 추가할 때 어떤 이름을 설정해야 하나요? 답변: 컴포넌트 이름을 **Teleport**로 설정해야 합니다. 질문: `Teleport` 컴포넌트를 어떤 대상에 추가해야 하는가요? 답변: **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가해야 합니다. 질문: 제공된 코드에서 `OnUpdate` 함수는 어떤 실행 공간에서 동작하나요? 답변: `[server only]` 실행 공간에서 동작합니다. 질문: 코드에서 `self._T.acc [original] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다. [chunk_id] | Guides:59:1
[task] | extract_knowledge [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | # UserService를 이용한 UserEntity 관리 `UserService`는 메이플스토리 월드 환경에서 유저의 상태 변화(입장, 퇴장 등)를 감지하고, 해당 유저의 식별 정보(`UserId`)를 제공하기 위한 서비스입니다. 이 서비스를 통해 스크립트 컴포넌트는 유저가 월드에 진입하거나 이탈하는 시점을 이벤트 기반으로 처리할 수 있습니다. ## 개념 설명 `UserService`는 다음과 같은 핵심 이벤트를 제공합니다: 1. **UserEnterEvent**: 유저가 월드에 최초 입장할 때 발생합니다. 2. **U [original] | # 학습 과정 소개 `UserService`를 통해 상황별로 **UserEntity**를 받는 방법을 알아봅니다. 간단한 스크립트 예제를 통해 `UserService`가 제공하는 기능을 알아보겠습니다. # 들어가기에 앞서 다음 가이드를 먼저 학습하면 본 과정을 이해하는 데 많은 도움이 됩니다. [서버와 클라이언트](/docs?postId=207) [실행 제어](/docs?postId=210) [Event System](/docs?postId=73) [Entity Event System](/docs?postId=176) # 예 [chunk_id] | Guides:60:0
[task] | wikipedia [title] | 텔레포트 [category] | Guides [rephrased] | # 이동 텔레포트 이동 텔레포트는 스크립트를 사용하여 엔티티를 다른 위치나 맵으로 즉시 이동시키는 기능입니다. 본 가이드에서는 서버 측 로직을 통해 캐릭터가 3초 간격으로 미리 정의된 목적지 맵으로 순환 이동하도록 설정하는 방법을 다룹니다. ## 컴포넌트 생성 및 설정 텔레포트 기능을 구현하기 위해 먼저 새 스크립트 컴포넌트를 생성하고 대상 캐릭터에 추가해야 합니다. 1. **Workspace - MyDesk** 영역에서 마우스 우클릭으로 콘텍스트 메뉴를 열고, **Create Scripts - Create Component [original] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다. [chunk_id] | Guides:59:1
[task] | distill [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | ### GetUsersByMapComponent() 특정 맵의 **mapComponent**를 매개 변수로 받아 해당 맵에 있는 유저 엔티티 배열을 반환합니다. `mapId`가 아닌 컴포넌트 객체를 전달해야 합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { local UserId = event.UserId local mapComponent = _EntityService:GetEntityByPath [original] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { [chunk_id] | Guides:60:4
[task] | extract_knowledge [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | # UserService: 유저 접속 끊김 및 재접속 이벤트 처리 ## 개념 설명 유저의 네트워크 불안정으로 인해 접속이 끊기거나, 이후 재접속하는 상황이 발생할 수 있습니다. 이러한 네트워크 상태 변화에 대한 이벤트는 `UserService`에서 발생시킵니다. 스크립트 컴포넌트는 `UserService`의 이벤트 핸들러를 통해 유저의 접속 끊김(`UserDisconnectEvent`) 또는 재접속(`UserReconnectEvent`) 시점에 필요한 로직을 처리할 수 있습니다. ## API 사용법 ### UserDiscon [original] | 유저의 네트워크가 불안정하면 접속이 끊길 수 있습니다. 또한 다시 재접속할 수도 있습니다. 이와 같이 접속 끊김/재접속 이벤트가 `UserService`에서 발생합니다. 스크립트 컴포넌트에서 해당 이벤트 핸들러를 추가하여 유저의 접속 끊김 또는 재접속 시점에 별도 처리를 추가할 수 있습니다. ### UserDisconnectEvent 유저의 네트워크 접속이 불안정하여 끊겼을 때 발생하는 이벤트입니다. 스크립트 컴포넌트에서 해당 이벤트 핸들러를 추가하여 접속이 끊겼을 때 처리를 추가할 수 있습니다. 다음은 접속이 끊긴 **Us [chunk_id] | Guides:60:1
[task] | diverse_qa [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | 질문: `UserService`의 `UserEntities` 프로퍼티는 어떤 타입의 데이터를 반환하나요? 답변: `UserEntities`는 사전(Dictionary) 타입이며, Key 값으로 UserId, Value 값으로 MODEntity를 반환합니다. 질문: 아래 코드가 수행하는 작업을 서술하시오. ```lua local AllUserEntitiesDic = _UserService.UserEntities for userId, playerEntity in pairs(AllUserEntitiesDic) do log("us [original] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User [chunk_id] | Guides:60:2
[task] | wikipedia [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | # UserService를 활용한 유저 엔티티 관리 `UserService`는 메이플스토리 월드에서 유저의 상태 변화에 따라 **UserEntity**를 조회하거나 이벤트를 처리하는 데 사용되는 서비스입니다. 이 문서는 `UserService`가 제공하는 주요 이벤트 핸들러의 구조와 활용 방법을 다루며, 특히 유저의 입장 및 퇴장 시점에서의 처리 로직을 집중적으로 설명합니다. 본 가이드를 이해하기 위해서는 서버와 클라이언트의 기본 개념, 스크립트 실행 제어 방식, 일반 이벤트 시스템(Event System), 그리고 엔티티 이벤 [original] | # 학습 과정 소개 `UserService`를 통해 상황별로 **UserEntity**를 받는 방법을 알아봅니다. 간단한 스크립트 예제를 통해 `UserService`가 제공하는 기능을 알아보겠습니다. # 들어가기에 앞서 다음 가이드를 먼저 학습하면 본 과정을 이해하는 데 많은 도움이 됩니다. [서버와 클라이언트](/docs?postId=207) [실행 제어](/docs?postId=210) [Event System](/docs?postId=73) [Entity Event System](/docs?postId=176) # 예 [chunk_id] | Guides:60:0
[task] | extract_knowledge [title] | 맵 레이어 [category] | Guides [rephrased] | # 맵 레이어 (Map Layer) ## 1. 개념 설명 맵 레이어는 엔티티(Entity)의 **레이어(Layer)** 속성과 **OrderInLayer** 속성을 기반으로 엔티티 간의 충돌 및 겹침 순서를 결정하는 시스템입니다. * **레이어 귀속 규칙**: 플레이어 아바타의 현재 레이어는 아바타가 밟고 있는 **엔티티(타일/플랫폼)의 레이어**를 따릅니다. * **이동 및 점프 시 레이어 변경**: 아바타가 다른 레이어에 속한 타일에 착지하면, 그 순간부터 아바타는 해당 타일의 레이어로 귀속됩니다. * **겹침 순 [original] | 초록 타일은 Layer1에, 연두 타일은 Layer2에 배치했습니다. 초록 타일을 밟고 있는 플레이어 아바타는 점프할 때까지는 Layer1에 머물러 있지만, 노란 타일에 착지하는 순간 Layer2에 있는 상태가 됩니다. #### 활용 예시 2 4개의 레이어에 각각 타일과 오브젝트를 배치했습니다.(OrderInLayer는 기본값입니다.) 플레이어 아바타는 밟고 있는 엔티티 레이어가 귀속 기준이므로 가장 아래 있는 layer1에서 움직이기 시작합니다. 초록 타일 위 나무 오브젝트들은 Layer4에 배치되어 있습니다. 그러므로 초록 [chunk_id] | Guides:53:1
[task] | distill [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | **LocalPlayer** 프로퍼티는 현재 클라이언트의 내 유저 엔티티를 반환하며, **클라이언트 공간에서만 유효**합니다. 서버 공간에서는 접근 불가하므로, 서버 이벤트 핸들러에서 사용할 경우 반드시 `[client]` 메서드를 통해 호출해야 합니다. ```lua Method: [client] void PrintLocalPlayerName() { local MyPlayer = _UserService.LocalPlayer log("MyPlayerName : "..MyPlayer.Name) } Event H [original] | **LocalPlayer**는 클라이언트에서 내 유저 엔티티를 얻을 수 있는 프로퍼티입니다. 특정 클라이언트에서 내 캐릭터라는 개념은 클라이언트에서만 유효합니다. 그러므로 서버에서는 사용할 수 없고 반드시 클라이언트에서만 사용할 수 있습니다. **UserEnterEventType**은 서버에서만 발생하기 때문에, 클라이언트에서 실행할 수 있는 함수를 하나 추가하여 유저가 게임에 들어올 때마다 내 캐릭터의 이름을 출력하는 코드를 작성해 줍니다. ```lua Method: [client] void PrintLocalPlayerNam [chunk_id] | Guides:60:5
[task] | diverse_qa [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | 질문: `UserService`에서 발생하는 접속 관련 이벤트는 무엇이며, 주로 어떤 상황에서 발생하나요? 답변: 유저의 네트워크 불안정으로 인한 접속 끊김과 재접속 상황에서 `UserDisconnectEvent`와 `UserReconnectEvent`가 발생합니다. 질문: 유저의 네트워크 접속이 불안정하여 끊겼을 때 발생하는 이벤트의 이름은 무엇인가요? 답변: `UserDisconnectEvent`입니다. 질문: 유저가 다시 재접속했을 때 발생하는 이벤트의 이름은 무엇인가요? 답변: `UserReconnectEvent`입니다. [original] | 유저의 네트워크가 불안정하면 접속이 끊길 수 있습니다. 또한 다시 재접속할 수도 있습니다. 이와 같이 접속 끊김/재접속 이벤트가 `UserService`에서 발생합니다. 스크립트 컴포넌트에서 해당 이벤트 핸들러를 추가하여 유저의 접속 끊김 또는 재접속 시점에 별도 처리를 추가할 수 있습니다. ### UserDisconnectEvent 유저의 네트워크 접속이 불안정하여 끊겼을 때 발생하는 이벤트입니다. 스크립트 컴포넌트에서 해당 이벤트 핸들러를 추가하여 접속이 끊겼을 때 처리를 추가할 수 있습니다. 다음은 접속이 끊긴 **Us [chunk_id] | Guides:60:1
[task] | knowledge_list [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | * `_UserService:GetUsersByMapComponent(mapComponent)`는 특정 맵의 `mapComponent`를 매개변수로 받아 해당 맵에 존재하는 모든 유저 엔티티의 배열을 반환하는 함수입니다. * `mapComponent` 값은 `_EntityService:GetEntityByPath("/maps/map01").MapComponent`와 같이 특정 맵 엔티티의 `MapComponent` 프로퍼티를 통해 얻습니다. * `_UserService:GetUserEntityByUserId(UserId) [original] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { [chunk_id] | Guides:60:4
[task] | knowledge_list [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | * `LocalPlayer`는 현재 클라이언트에서 실행 중인 내 유저 엔티티를 반환하는 `_UserService`의 프로퍼티이며, 클라이언트 공간에서만 유효하므로 서버 공간에서 접근할 수 없습니다. * `UserEnterEvent`는 유저가 게임에 진입할 때 서버에서만 발생하는 이벤트이며, 이벤트 핸들러 매개변수로 `UserEnterEvent` 타입의 `event` 객체를 전달받습니다. * `UserEnterEvent` 객체의 `UserId` 프로퍼티는 해당 이벤트를 유발한 유저의 고유 식별자를 반환하는 매개변수입니다. [original] | **LocalPlayer**는 클라이언트에서 내 유저 엔티티를 얻을 수 있는 프로퍼티입니다. 특정 클라이언트에서 내 캐릭터라는 개념은 클라이언트에서만 유효합니다. 그러므로 서버에서는 사용할 수 없고 반드시 클라이언트에서만 사용할 수 있습니다. **UserEnterEventType**은 서버에서만 발생하기 때문에, 클라이언트에서 실행할 수 있는 함수를 하나 추가하여 유저가 게임에 들어올 때마다 내 캐릭터의 이름을 출력하는 코드를 작성해 줍니다. ```lua Method: [client] void PrintLocalPlayerNam [chunk_id] | Guides:60:5
[task] | wikipedia [title] | 맵 생성과 관리 [category] | Guides [rephrased] | 지형 맵 생성과 관리에서 맵 간 연결을 설정하려면, 먼저 연결하려는 맵에 포탈을 설치해야 합니다. 포탈이 설치되면 해당 포탈의 프로퍼티 에디터에서 **TargetPortal** 항목의 **[◉]** 버튼을 클릭합니다. 이때 표시되는 **Reference** 팝업 창에서 이동 대상으로 할 포탈을 선택하여 연결을 완료합니다. 설정이 끝나면 **[시작]** 버튼을 클릭하여 플레이를 시작하고, 출발 포탈에서 도착 포탈로 정상적으로 이동되는지 확인해야 합니다. 맵의 크기와 개수에 대한 최적의 정답은 없으며, 크리에이터의 기획에 따라 여러 [original] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플 [chunk_id] | Guides:61:1
[task] | knowledge_list [title] | 맵 생성과 관리 [category] | Guides [rephrased] | 제시된 원문에는 mLua 스크립트 언어의 Property, Method, Event Handler 정의나 `_UserService`, `_EntityService` 등의 서비스 API, `Vector2`, `Entity` 등 타입 정보, 그리고 `server only`/`client only` 실행 공간 제약에 대한 기술적 사실이 포함되어 있지 않습니다. 원문은 포탈 연결 절차와 맵 설계 시 고려사항에 대한 일반적 가이드만 제공하고 있으므로, 요청하신 조건(독립적 문장, API 이름/매개변수/반환 타입/동기화 제약 명시)에 부합하는 [original] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플 [chunk_id] | Guides:61:1
[task] | distill [title] | 맵 생성과 관리 [category] | Guides [rephrased] | # 지형 맵 생성과 관리 ## 포탈 연결 설정 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 `TargetPortal`의 **[◉]** 버튼을 클릭하고, **Reference** 팝업 창에서 이동할 대상 포탈을 선택합니다. 3. **[시작]** 버튼으로 실행 후, 출발지에서 도착지로 정상 이동되는지 확인합니다. ## 성능 최적화 가이드 * **맵 구성 유연성**: 맵의 크기와 개수는 정해진 기준이 없으며, 기획에 따라 분할 또는 통합하여 제작할 수 있습니다. * **성능 주의사항**: 맵이 과도 [original] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플 [chunk_id] | Guides:61:1
[task] | wikipedia [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | **UserService**는 메이플스토리 월드 스크립트 환경에서 게임에 참여 중인 유저 관련 정보를 관리하고 조회하기 위한 서비스입니다. 이 서비스는 유저 엔티티의 참조, 유저의 프로필 정보, 그리고 현재 접속 중인 유저의 수를 가져오는 기능을 제공합니다. ### UserEntities 프로퍼티 **UserService**는 **UserEntities** 프로퍼티를 통해 게임에 참여 중인 모든 유저 엔티티에 접근할 수 있게 합니다. **UserEntities**는 사전(Dictionary) 타입의 데이터 구조를 가지며, 키(K [original] | **UserService**는 게임에 참여 중인 모든 유저 엔티티를 받아오는 **UserEntities** 프로퍼티를 제공합니다. **UserEntities**는 사전(Dictionary) 타입입니다. **Key - Value** 값으로 **UserId - MODEntity**를 반환합니다. 다음은 유저가 게임에 들어올 때마다 모든 플레이어를 순회하며 **Entity Name**을 출력하는 예제입니다. 위의 **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: User [chunk_id] | Guides:60:2
[task] | diverse_qa [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | 질문: `GetUserCount()` 함수의 역할은 무엇인가요? 답변: `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 질문: 다음 코드에서 `log` 함수에 출력되는 값은 무엇인가요? ```lua local userCount = _UserService:GetUserCount() log("CurrentUserCount : "..userCount) ``` 답변: 현재 게임에 참여 중인 유저 수가 "CurrentUserCount : " 뒤에 붙어 출력됩니다. 질문: `HandleUserEnte [original] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------- [chunk_id] | Guides:60:3
[task] | extract_knowledge [title] | 텔레포트 [category] | Guides [rephrased] | # 이동 텔레포트 (Teleport) ## 개념 설명 mLua 스크립트를 통해 캐릭터 또는 엔티티를 다른 맵의 특정 위치로 즉시 이동시키는 기능입니다. 이 기능은 `_TeleportService` 서비스의 `TeleportToEntityPath` 메서드를 사용하여 구현합니다. 해당 메서드는 이동 대상 엔티티와 목적지 엔티티의 경로를 인수로 받아 텔레포트를 수행합니다. ## API 사용법 텔레포트 기능 구현을 위해 다음과 같은 요소들을 사용합니다. 1. **`_TeleportService`**: 텔레포트 관련 기능을 제공하는 [original] | 스크립트를 통해 텔레포트 기능을 만듭니다. 새 스크립트 컴포넌트를 만든 뒤 캐릭터에 추가합니다. 1. **Workspace - MyDesk** 콘텍스트 메뉴에서 **Create Scripts - Create Component**를 클릭해 새 컴포넌트를 추가합니다. 2. 컴포넌트 이름을 **Teleport**로 설정합니다. 3. **Workspace - DefaultPlayer**에 **Teleport** 컴포넌트를 추가합니다. 이제 본격적으로 스크립트를 작성해 봅시다. [chunk_id] | Guides:59:1
[task] | diverse_qa [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | 질문: `GetUsersByMapComponent()` 함수의 매개 변수로 무엇을 전달해야 하는가? 답변: 특정 맵의 `mapId`가 아닌 `mapComponent`를 매개 변수로 넘겨야 합니다. 질문: `GetUsersByMapComponent()` 함수는 어떤 결과를 반환하는가? 답변: 특정 맵에 있는 유저 엔티티를 배열로 반환합니다. 질문: 아래 코드는 무엇을 수행하는가? ```lua local mapComponent = _EntityService:GetEntityByPath("/maps/map01").MapComponen [original] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { [chunk_id] | Guides:60:4
[task] | wikipedia [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | **UserService**는 메이플스토리 월드에서 유저 엔티티를 검색하고 관리하는 데 사용되는 서비스입니다. 이 문서는 `UserService`의 프로퍼티와 이벤트를 활용하여 특정 클라이언트에 연결된 유저 엔티티(내 캐릭터)를 참조하는 방법을 설명합니다. `UserService`에는 **LocalPlayer**라는 프로퍼티가 존재합니다. 이 프로퍼티는 현재 스크립트가 실행되고 있는 클라이언트에서 해당 유저가 조작 중인 엔티티를 반환합니다. 여기서 '내 캐릭터'라는 개념은 물리적으로 연결된 클라이언트와 서버 간의 통신 관계에 따라 [original] | **LocalPlayer**는 클라이언트에서 내 유저 엔티티를 얻을 수 있는 프로퍼티입니다. 특정 클라이언트에서 내 캐릭터라는 개념은 클라이언트에서만 유효합니다. 그러므로 서버에서는 사용할 수 없고 반드시 클라이언트에서만 사용할 수 있습니다. **UserEnterEventType**은 서버에서만 발생하기 때문에, 클라이언트에서 실행할 수 있는 함수를 하나 추가하여 유저가 게임에 들어올 때마다 내 캐릭터의 이름을 출력하는 코드를 작성해 줍니다. ```lua Method: [client] void PrintLocalPlayerNam [chunk_id] | Guides:60:5
[task] | distill [title] | 맵 생성과 관리 [category] | Guides [rephrased] | # 지형 맵 생성과 관리 ## 맵 관리 경로 * **Hierarchy - maps**: 하위 엔트리 콘텍스트 메뉴 사용 * **Window - Map List**: 목록 창에서 관리 ## 기본 작업 * **생성**: `Create New Map` / `[새 맵 만들기]` 클릭. 맵 이름 번호는 오름차순으로 자동 부여됩니다. * **복제**: 대상 맵의 `Duplicate` (Hierarchy) 또는 `Duplicate Map` (Map List) 클릭. * **삭제**: 대상 맵의 `Delete` (Hierarchy) 또는 `D [original] | # 학습 과정 소개 다양한 맵은 월드를 탐험하는 유저들에게 다채로운 재미를 선사합니다. 이번 과정에서는 맵 생성과 관리 방법을 알아봅시다. # 맵 관리 방법 맵 관리 방법에는 2가지가 있습니다. * **Hierarchy - maps** 하위 엔트리의 콘텍스트 메뉴를 통해 관리 * **Window - Map List** 창에서 관리 # 새 맵 만들기 | Hierarchy | Map List | | ----------- | ------- | | **Hierarchy - maps**의 콘텍스트 메뉴에서 **Create New M [chunk_id] | Guides:61:0
[task] | diverse_qa [title] | 맵 생성과 관리 [category] | Guides [rephrased] | 질문: 맵 간 연결을 위해 설치해야 하는 오브젝트는 무엇인가요? 답변: 연결하려는 맵에 포탈을 설치해야 합니다. 질문: 포탈의 이동 대상(TargetPortal)을 설정할 때 프로퍼티 에디터에서 어떤 버튼을 클릭해야 하나요? 답변: **TargetPortal**의 **[◉]** 버튼을 클릭해야 합니다. 질문: **[◉]** 버튼을 클릭한 후 이동할 포탈을 선택하기 위해 나타나는 팝업 창의 이름은 무엇인가요? 답변: **Reference** 팝업 창이 나타납니다. 질문: 포탈 설정 후 이동이 정상적으로 되는지 확인하기 위해 실행 [original] | 1. 연결하려는 맵에 포탈을 설치합니다. 2. 포탈의 프로퍼티 에디터에서 **TargetPortal**의 **[◉]** 버튼을 클릭합니다. 이후 **Reference** 팝업 창에서 이동할 포탈을 선택합니다. 3. **[시작]** 버튼을 클릭한 뒤, 출발 포탈에서 도착 포탈로 잘 이동하는지 확인합니다. # 마무리 좋은 맵의 크기와 개수는 정해진 답이 없습니다. 크리에이터의 기획에 맞게 여러 개의 맵을 만들거나, 하나의 커다란 맵을 만들어도 좋습니다. 그러나 맵이 너무 거대하거나 배치된 오브젝트가 많으면 로딩 및 플 [chunk_id] | Guides:61:1
[task] | wikipedia [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | 다음은 `mLua` 스크립트 언어에서 유저 엔티티를 관리하기 위한 `UserService`의 심화 기능에 대한 설명입니다. 이 섹션에서는 특정 맵에 존재하는 유저를 조회하는 방법과, 유저 식별자(UserId)를 기반으로 해당 유저의 엔티티 객체를 직접 참조하는 방법에 대해 다룹니다. ### GetUsersByMapComponent() 함수 `GetUsersByMapComponent()`는 특정 맵 내에 존재하는 모든 유저 엔티티를 배열 형태로 반환하는 함수입니다. 이 함수를 호출할 때 매개 변수로 넘겨야 하는 값은 맵의 고유 식 [original] | `GetUsersByMapComponent()` 역시 특정 맵에 있는 유저 엔티티를 얻어오는 함수입니다. 특정 맵의 **mapId**가 아닌 **mapComponent**를 매개 변수로 넘겨줍니다. 다음은 map01에 있는 모든 유저를 `GetUsersByMapComponent()`로 받아오는 코드입니다. **UserEnterEvent**을 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { [chunk_id] | Guides:60:4
[task] | wikipedia [title] | 유저 엔티티를 찾아주는 UserService [category] | Guides [rephrased] | # UserService를 활용한 유저 엔티티 조회 `UserService`는 메이플스토리 월드 스크립트 환경에서 유저 엔티티의 상태와 위치를 조회하기 위해 사용되는 서비스입니다. 이 서비스는 현재 접속한 유저의 총 수를 확인하거나, 특정 맵에 존재하는 유저 목록을 가져오는 기능을 제공합니다. 모든 함수 호출 시 언더스코어 접두사가 붙은 `_UserService`를 통해 접근합니다. ## 현재 유저 수 조회: GetUserCount() `_UserService:GetUserCount()` 메서드는 현재 게임 세션에 참여하고 있 [original] | `GetUserCount()`는 현재 게임에 참여 중인 유저 수를 리턴하는 함수입니다. 다음은 유저가 게임에 들어올 때마다 게임에 참여 중인 모든 유저 수를 출력하는 예제입니다. **UserEnterEvent**를 다음과 같이 수정합니다. ```lua Event Handler: [service: UserService] HandleUserEnterEvent (UserEnterEvent event) { -- Parameters local UserId = event.UserId -------------------- [chunk_id] | Guides:60:3