[task] | extract_knowledge [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | # 광부 시뮬레이터 리메이크: 공중 이중 점프 구현 ## 개념 설명 이 절에서는 `ExtendPlayerControllerComponent`를 확장하여 플레이어가 지면에 있을 때만 1차 점프하고, 공중에 있을 때 특정 키를 입력하면 2차 점프(이중 점프)를 수행하도록 로직을 추가하는 방법을 다룹니다. 이 기능을 구현하기 위해 `InputService`의 키 입력 이벤트와 `UserService`를 통한 로컬 플레이어 식별, 그리고 `RigidbodyComponent`의 지면 접촉 상태 확인을 조합해야 합니다. 또한, 남은 공중 점 [original] | 1. `ExtendPlayerControllerComponent` Entity Event Handler에 **KeyDownEvent**를 추가합니다. `UserService`를 활용해 키를 입력한 플레이어만 공중 점프할 수 있도록 조건을 추가해야 합니다. ```lua Event Handler: [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { --------------- Native Event Sender Info [chunk_id] | Guides:1098:2
[task] | extract_knowledge [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | # 포션 효과 변경하기 (MP 회복으로 수정) ## 개념 설명 광부 시뮬레이터 월드에서 기본 제공되는 `PlayerMineData` 컴포넌트는 포션 사용 시 캐릭터의 HP(체력)를 회복하도록 설정되어 있습니다. 이 절에서는 해당 컴포넌트의 `UsePotion()` 메서드를 수정하여, 포션을 사용했을 때 HP 대신 MP(마나)가 회복되도록 로직을 변경하는 방법을 다룹니다. 수정 대상은 `Workspace > MyDesk > Components > DefaultPlayerComponents > PlayerMineData` 경로에 위치 [original] | 광부 시뮬레이터의 기존 컴포넌트 내용을 수정하거나, 새로운 엔티티, 컴포넌트를 추가해 나만의 색다른 재미를 만들어봅시다. # 포션 효과 변경하기 광산에서 포션을 얻어 사용하면 HP 대신 MP를 회복하도록 만들어 봅시다. **Workspace - MyDesk - Components - DefaultPlayerComponents - PlayerMineData** 컴포넌트의 `UsePotion()`함수를 수정합니다. ```lua local recoveryAmount = self.Entity.PlayerStatus.MPMa [chunk_id] | Guides:1098:0
[task] | knowledge_list [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | 제시된 문서에 포함된 핵심 사실은 다음과 같습니다. 1. `UI_MouseHoverGuide` 컴포넌트는 `Entity` 타입의 `TargetPanel` 프로퍼티를 `[None]` 동기화 모드로 선언하며, 초기값은 `nil`입니다. 2. `UI_MouseHoverGuide` 컴포넌트의 `HandleButtonStateChangedEvent(ButtonStateChangeEvent event)` 이벤트 핸들러는 `[self]` 실행 공간에서 동작하며, `event.state` 매개변수를 통해 버튼 상태를 확인합니다. 3. 모바일 플 [original] | # UI 툴팁 만들기 #### 체력바 가이드 UI 만들기 체력 바에 마우스를 올리거나, 터치했을 때 설명 UI가 나타나게 만들어 봅시다. 1. **Workspace - MyDesk - Component - UI**에 새로운 **UI_MouseHoverGuide** 컴포넌트를 추가합니다. ```lua Property: [None] Entity TargetPanel = nil Event Handler: [self] HandleButtonStateChangedEvent [chunk_id] | Guides:1098:4
[task] | distill [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | # FlappyFish 리메이크 가이드 완성본 월드를 리메이크한 후 기존 엔트리를 삭제하고 활용하세요. ## 1. 기본 설정 싱크가 불필요한 싱글플레이어 게임이므로 `DefaultPlayer`의 기본 컴포넌트를 비활성화하고 스프라이트 렌더링을 설정합니다. 1. **비활성화**: `RigidbodyComponent`, `MovementComponent`, `AvatarRendererComponent` 2. **추가**: `SpriteRendererComponent` - RUID: `042e264bcfec43dd9f2df06 [original] | FlappyFish 월드를 리메이크해 나만의 FlappyFish를 만들 수 있습니다. FlappyFish 강의 학습 시 가이드를 보조 교재로 활용할 수 있습니다. 리메이크 월드는 완성본이므로, 해당 월드를 리메이크한 뒤 엔트리를 삭제 후 활용하시길 바랍니다. $$childList $$ # 기본 설정 플래피 피쉬는 게임으로 다른 클라이언트와의 동기화가 필요하지 않습니다. DefaultPlayer가 가진 컴포넌트 서버와 동기화하는 컴포넌트들을 비활성화해 기본 설정 변경해봅시다. 1. 서버와 위치를 자동으로 동기화하는 **Rig [chunk_id] | Guides:1100:0
[task] | diverse_qa [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | 질문: `ActionDoubleJump()` 함수를 생성할 때 사용할 실행 공간(Execution Space)은 무엇인가요? 답변: `[client]` 입니다. 질문: `ActionDoubleJump()` 함수 내부에서 `self.LeftAirJumpCount` 값이 0 이하일 때 함수는 어떻게 동작하나요? 답변: 즉시 return을 수행하여 함수를 종료합니다. 질문: `ActionDoubleJump()` 함수에서 현재 속도를 가져오기 위해 접근하는 컴포넌트 프로퍼티는 무엇인가요? 답변: `self.Entity.Rigidbody [original] | 3. **ExtendPlayerControllerComponent**에 `ActionDoubleJump()` 함수를 새로 생성합니다. ```lua Method: [client] void ActionDoubleJump() { if self.LeftAirJumpCount <= 0 then return end local currentSpeed = self.Entity.RigidbodyComponent.RealMo [chunk_id] | Guides:1098:3
[task] | extract_knowledge [title] | InteractionObjectsComponents [category] | Guides [rephrased] | # 광부 시뮬레이터 리메이크: 상호작용 및 도구 컴포넌트 본 절에서는 광부 시뮬레이터 리메이크 프로젝트에서 사용되는 주요 상호작용 컴포넌트인 `InteractionObjectsComponents`, `ToolBoxObject`, `Tool_Trampoline`의 구조와 동작 방식을 설명합니다. 각 컴포넌트는 mLua 스크립트 언어를 기반으로 작성되며, 클라이언트 측 로직 처리에 중점을 둡니다. ## 1. InteractionObjectsComponents 마을 간 이동 포탈에 적용되는 컴포넌트입니다. 플레이어의 마을 입장 권한 [original] | | 동기화 | 타입 | 이름 | 설명 | | --- | --- | --- | --- | | client only | void | OnBeginPlay | 마을에서 마을로 이동하는 포탈에 목적지 마을의 이름을 표시합니다. 플레이어가 포털로 이동 가능한지 여부에 따라 자식 엔티티를 활성화/비활성화 합니다. | #### Entity Event Handler | 실행제어 | 이벤트 중계자 |이름 | 설명 | | --- | --- | --- | --- | | client only | self |InteractionEvent2 | 이 [chunk_id] | Guides:1096:2
[task] | extract_knowledge [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | # 광부 시뮬레이터 리메이크: 솟아오르는 함정 구현 ## 개념 설명 플레이어 엔티티가 특정 영역에 진입했을 때 발동하여 일정 시간 동안 솟아오르는 함정 시스템을 구현합니다. 이 시스템은 `TriggerComponent`를 통해 플레이어의 진입을 감지하고, `_TimerService`를 사용하여 함정의 상승 및 하강 타이밍을 제어하며, 중복 발동을 방지하기 위한 상태 플래그(`IsActivated`)를 관리합니다. ## API 사용법 ### 1. 씬 구성 및 엔티티 배치 1. **Preset List**에서 `Trap - tra [original] | 특정 영역에 플레이어 엔티티가 들어오면 솟아오르는 함정을 만들어 봅시다. 1. **Preset List - Trap - trap-26을** Scene에 배치합니다. 2. **trap-26** 엔티티의 SpriteRendererComponent의 SortingLayer를 **Background**로 변경합니다. 3. 새로운 **Trap_RiseupTrap** 엔티티를 생성합니다. **SpriteRendererComponent, TransformComponent, TriggerComponent**를 추가하고, 배치한 함정 위쪽으로 배 [chunk_id] | Guides:1098:1
[task] | distill [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | # [Guides] 응용 제작 가이드: 플래피 피쉬 리메이크 ## 1. 카메라 범위 제한 `DefaultPlayer`의 `CameraComponent`에서 `UseCustomBound`를 활성화하고, X축 이동 범위를 설정합니다. * **LeftBottom**: -1000 * **RightTop**: 1000 ## 2. 물고기 부력(Floating) 구현 `FishPlayerComponent`에 `floatingDegree` 프로퍼티를 추가하고 기본값을 `6`으로 설정합니다. 입력 시 Y축 속도를 변경하는 `Floatin [original] | 물고기가 추락하는 것을 일정 범위 안에서만 보여줄 수 있도록 카메라의 범위를 한정해봅시다 1. **DefaultPlayer - CameraComponent - UseCustomBound**를 활성화합니다. 2. **[Edit]** 버튼을 눌러 카메라가 이동하는 범위를 제한할 수 있도록 값을 입력합니다. X 축으로 카메라가 이동할 수 있도록 **LeftBottom, RightTop** 프로퍼티를 아랫값으로 설정합니다. * LeftBottom: -1000 * RightTop: 1000 3. FishPlay [chunk_id] | Guides:1100:1
[task] | knowledge_list [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | 제시된 원문에는 '카메라 바운드 조정' 섹션의 본문 내용이 누락되어 있어 해당 부분의 기술적 사실은 추출할 수 없습니다. 원문에 명시된 정보만을 바탕으로 핵심 사실을 정리하면 다음과 같습니다. 1. FlappyFish 리메이크 월드는 완성본 형태로 제공되며, 학습 후 엔티리를 삭제하여 활용하도록 권장됩니다. 2. 게임은 다른 클라이언트와의 동기화가 필요 없으므로, `DefaultPlayer`에서 위치를 자동으로 동기화하는 `RigidbodyComponent`와 `MovementComponent`를 비활성화해야 합니다. 3. 물고기 [original] | FlappyFish 월드를 리메이크해 나만의 FlappyFish를 만들 수 있습니다. FlappyFish 강의 학습 시 가이드를 보조 교재로 활용할 수 있습니다. 리메이크 월드는 완성본이므로, 해당 월드를 리메이크한 뒤 엔트리를 삭제 후 활용하시길 바랍니다. $$childList $$ # 기본 설정 플래피 피쉬는 게임으로 다른 클라이언트와의 동기화가 필요하지 않습니다. DefaultPlayer가 가진 컴포넌트 서버와 동기화하는 컴포넌트들을 비활성화해 기본 설정 변경해봅시다. 1. 서버와 위치를 자동으로 동기화하는 **Rig [chunk_id] | Guides:1100:0
[task] | knowledge_list [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | 제공된 문서 '[Guides] 응용 제작 가이드 플래피 피쉬 리메이크'의 내용을 바탕으로 핵심 사실을 추출하여 정리했습니다. 1. 카메라 이동 범위를 한정하기 위해 `DefaultPlayer`의 `CameraComponent`에서 `UseCustomBound` 프로퍼티를 활성화해야 합니다. 2. `CameraComponent`의 `[Edit]` 기능을 통해 `LeftBottom`을 -1000, `RightTop`을 1000으로 설정하여 X축 카메라 이동 범위를 제한합니다. 3. `FishPlayerComponent`에 `[None [original] | 물고기가 추락하는 것을 일정 범위 안에서만 보여줄 수 있도록 카메라의 범위를 한정해봅시다 1. **DefaultPlayer - CameraComponent - UseCustomBound**를 활성화합니다. 2. **[Edit]** 버튼을 눌러 카메라가 이동하는 범위를 제한할 수 있도록 값을 입력합니다. X 축으로 카메라가 이동할 수 있도록 **LeftBottom, RightTop** 프로퍼티를 아랫값으로 설정합니다. * LeftBottom: -1000 * RightTop: 1000 3. FishPlay [chunk_id] | Guides:1100:1
[task] | diverse_qa [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | 질문: FlappyFish 월드 리메이크 가이드에서 기본 설정 변경 시 DefaultPlayer에서 비활성화해야 하는 서버 동기화 관련 컴포넌트는 무엇인가요? 답변: RigidbodyComponent와 MovementComponent를 비활성화해야 합니다. 질문: 물고기 형태의 아바타를 사용하기 위해 DefaultPlayer에서 비활성화해야 하는 기존 아바타 렌더링 컴포넌트는 무엇인가요? 답변: AvatarRendererComponent를 비활성화해야 합니다. 질문: DefaultPlayer에 SpriteRendererCompo [original] | FlappyFish 월드를 리메이크해 나만의 FlappyFish를 만들 수 있습니다. FlappyFish 강의 학습 시 가이드를 보조 교재로 활용할 수 있습니다. 리메이크 월드는 완성본이므로, 해당 월드를 리메이크한 뒤 엔트리를 삭제 후 활용하시길 바랍니다. $$childList $$ # 기본 설정 플래피 피쉬는 게임으로 다른 클라이언트와의 동기화가 필요하지 않습니다. DefaultPlayer가 가진 컴포넌트 서버와 동기화하는 컴포넌트들을 비활성화해 기본 설정 변경해봅시다. 1. 서버와 위치를 자동으로 동기화하는 **Rig [chunk_id] | Guides:1100:0
[task] | wikipedia [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | # UI 툴팁 만들기 본 섹션은 메이플스토리 월드(MapleStory Worlds)의 스크립트 환경에서 사용자 인터페이스(UI) 인터랙션 기능을 구현하는 방법을 설명한다. 구체적으로, 체력바에 마우스를 올리거나 터치했을 때 설명 UI가 표시되도록 하는 방법과, 로딩 화면의 팁 메시지를 데이터셋(DataSet)을 기반으로 무작위로 노출하는 방법을 다룬다. ## 체력바 가이드 UI 만들기 체력 바(HP Bar) 영역에 대한 설명 UI를 마우스 호버 또는 터치 입력에 따라 토글(Toggle)하는 방법을 단계별로 설명한다. 첫째, [original] | # UI 툴팁 만들기 #### 체력바 가이드 UI 만들기 체력 바에 마우스를 올리거나, 터치했을 때 설명 UI가 나타나게 만들어 봅시다. 1. **Workspace - MyDesk - Component - UI**에 새로운 **UI_MouseHoverGuide** 컴포넌트를 추가합니다. ```lua Property: [None] Entity TargetPanel = nil Event Handler: [self] HandleButtonStateChangedEvent [chunk_id] | Guides:1098:4
[task] | diverse_qa [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | 질문: 체력바 가이드 UI를 만들기 위해 Workspace의 어떤 경로에 새로운 컴포넌트를 추가해야 하나요? 답변: Workspace - MyDesk - Component - UI 경로에 새로운 UI_MouseHoverGuide 컴포넌트를 추가해야 합니다. 질문: UI_MouseHoverGuide 컴포넌트에서 모바일 플랫폼에서 가이드 UI가 나타나는 조건은 무엇인가요? 답변: Environment:IsMobilePlatform()이 true이고, ButtonStateChangeEvent의 state가 ButtonState.Pres [original] | # UI 툴팁 만들기 #### 체력바 가이드 UI 만들기 체력 바에 마우스를 올리거나, 터치했을 때 설명 UI가 나타나게 만들어 봅시다. 1. **Workspace - MyDesk - Component - UI**에 새로운 **UI_MouseHoverGuide** 컴포넌트를 추가합니다. ```lua Property: [None] Entity TargetPanel = nil Event Handler: [self] HandleButtonStateChangedEvent [chunk_id] | Guides:1098:4
[task] | wikipedia [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | # 응용 제작 가이드: 플래피 피쉬 리메이크 ## 카메라 범위 제한 물고기의 추락 모습을 제한된 범위 내에서만 시각화하기 위해 카메라의 이동 범위를 설정하는 과정은 다음과 같다. 첫째, `DefaultPlayer` 엔티티의 `CameraComponent`에서 `UseCustomBound` 프로퍼티를 활성화해야 한다. 활성화 후 `[Edit]` 버튼을 통해 카메라가 이동할 수 있는 범위의 좌표값을 입력한다. X 축 방향으로 카메라가 이동하도록 하기 위해 `LeftBottom`과 `RightTop` 프로퍼티의 값을 각각 `-100 [original] | 물고기가 추락하는 것을 일정 범위 안에서만 보여줄 수 있도록 카메라의 범위를 한정해봅시다 1. **DefaultPlayer - CameraComponent - UseCustomBound**를 활성화합니다. 2. **[Edit]** 버튼을 눌러 카메라가 이동하는 범위를 제한할 수 있도록 값을 입력합니다. X 축으로 카메라가 이동할 수 있도록 **LeftBottom, RightTop** 프로퍼티를 아랫값으로 설정합니다. * LeftBottom: -1000 * RightTop: 1000 3. FishPlay [chunk_id] | Guides:1100:1
[task] | distill [title] | WorldConfig [category] | Guides [rephrased] | # WorldConfig 설정 ## RestrictedPlayerEntitySync 플레이어 엔티티의 **Sync** 프로퍼티 클라이언트 → 서버 동기화를 차단하여 보안을 강화합니다. * **예외**: `MovementComponent`, `PlayerControllerComponent`, `StateComponent`, `TransformComponent`는 항상 동기화되므로 주의해야 합니다. ```lua [client only] void ShowChatBalloon() { local chatBalloon = sel [original] | 플레이어 엔티티에 속한 네이티브 컴포넌트의 **Sync** 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 설정합니다. 이 설정을 활성화하면 월드의 보안을 강화할 수 있습니다. 예를 들어 클라이언트에서 `ChatBalloonComponent.Message`에 메시지를 입력하면 서버로 동기화하지 않기 때문에 다른 플레이어들의 화면에서는 말풍선이 나타나지 않습니다. ```lua [client only] void ShowChatBalloon() { local chatBalloon = self.Entity.ChatB [chunk_id] | Guides:1101:1
[task] | knowledge_list [title] | WorldConfig [category] | Guides [rephrased] | 제공된 원문에는 `RestrictedPlayerEntitySync` 항목의 본문 내용이 포함되어 있지 않으므로, 해당 항목에 대한 사실은 추출할 수 없습니다. 원문에 명시된 정보만을 바탕으로 핵심 사실을 정리하면 다음과 같습니다. 1. WorldConfig는 메이플스토리 월드의 제작 중 월드에 전반적인 영향을 미치는 다양한 월드 설정 기능을 제공하며, `Edit - WorldConfig` 또는 `Workspace - WorldConfig`를 통해 접근하고 세부 설정 항목을 프로퍼티 에디터 창에서 확인할 수 있습니다. 2. Lega [original] | # 학습 과정 소개 메이플스토리 월드는 WorldConfig에서 다양한 월드 설정 기능을 제공합니다. WorldConfig의 기능은 제작 중인 월드에 전반적인 영향을 끼칩니다. ##### 참고 가이드 * [실행 제어](/docs/?postId=210) * [Effective MSW 2](/docs/?postId=560) * [패킷 변조 대비하기](/docs?postId=1102) * [예시로 알아보는 서버 검증](/docs?postId=1084) # WorldConfig 소개 WorldConfig는 크리에이터가 제작하는 월드의 [chunk_id] | Guides:1101:0
[task] | distill [title] | WorldConfig [category] | Guides [rephrased] | # WorldConfig 설정 가이드 WorldConfig는 메이플스토리 월드의 전반적인 동작과 보안을 제어하는 설정 컴포넌트입니다. ## 접근 방법 * **Edit > WorldConfig** 또는 **Workspace > WorldConfig** 선택 시 프로퍼티 에디터에서 세부 설정 확인 가능. ## 주요 설정 항목 ### 1. LegacyAnimation * **설명**: 2023년 3월 23일 이전 버전의 아바타 움직임/애니메이션 적용 여부. * **권장 사항**: 현재 아바타 동작이 원작 메이플스토리와 유사하므로, [original] | # 학습 과정 소개 메이플스토리 월드는 WorldConfig에서 다양한 월드 설정 기능을 제공합니다. WorldConfig의 기능은 제작 중인 월드에 전반적인 영향을 끼칩니다. ##### 참고 가이드 * [실행 제어](/docs/?postId=210) * [Effective MSW 2](/docs/?postId=560) * [패킷 변조 대비하기](/docs?postId=1102) * [예시로 알아보는 서버 검증](/docs?postId=1084) # WorldConfig 소개 WorldConfig는 크리에이터가 제작하는 월드의 [chunk_id] | Guides:1101:0
[task] | diverse_qa [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | 질문: 카메라의 이동 범위를 한정하기 위해 DefaultPlayer의 CameraComponent에서 어떤 프로퍼티를 활성화해야 하나요? 답변: UseCustomBound 프로퍼티를 활성화해야 합니다. 질문: 카메라가 X 축으로 이동할 수 있도록 LeftBottom과 RightTop 프로퍼티의 값을 각각 어떻게 설정해야 하나요? 답변: LeftBottom은 -1000, RightTop은 1000으로 설정해야 합니다. 질문: FishPlayerComponent에 추가하는 floatingDegree 프로퍼티의 기본 값은 얼마인가요? [original] | 물고기가 추락하는 것을 일정 범위 안에서만 보여줄 수 있도록 카메라의 범위를 한정해봅시다 1. **DefaultPlayer - CameraComponent - UseCustomBound**를 활성화합니다. 2. **[Edit]** 버튼을 눌러 카메라가 이동하는 범위를 제한할 수 있도록 값을 입력합니다. X 축으로 카메라가 이동할 수 있도록 **LeftBottom, RightTop** 프로퍼티를 아랫값으로 설정합니다. * LeftBottom: -1000 * RightTop: 1000 3. FishPlay [chunk_id] | Guides:1100:1
[task] | extract_knowledge [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | # UI 툴팁 및 무작위 메시지 처리 본 절에서는 마우스 호버 또는 터치 시 설명 UI를 표시하는 방법과 DataSet을 활용해 무작위 메시지를 노출하는 mLua 스크립팅 기법을 다룹니다. ## 1. 체력바 가이드 UI 만들기 `UI_MouseHoverGuide` 컴포넌트를 활용하여 특정 패널(예: HP/MP 설명 패널)에 마우스를 올리거나 터치했을 때 활성화/비활성화하는 로직을 구현합니다. ### 1.1 컴포넌트 구조 및 프로퍼티 새로운 `UI_MouseHoverGuide` 컴포넌트를 생성하여 `Workspace - My [original] | # UI 툴팁 만들기 #### 체력바 가이드 UI 만들기 체력 바에 마우스를 올리거나, 터치했을 때 설명 UI가 나타나게 만들어 봅시다. 1. **Workspace - MyDesk - Component - UI**에 새로운 **UI_MouseHoverGuide** 컴포넌트를 추가합니다. ```lua Property: [None] Entity TargetPanel = nil Event Handler: [self] HandleButtonStateChangedEvent [chunk_id] | Guides:1098:4
[task] | wikipedia [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | # 플래피 피쉬 리메이크 가이드 본 문서는 기존 메이플스토리 월드의 FlappyFish 월드를 기반으로 한 리메이크 프로젝트의 제작 방법을 안내합니다. 이 가이드는 FlappyFish 강의 학습 시 보조 교재로 활용할 수 있으며, 제공된 리메이크 월드는 완성된 형태이므로 해당 월드를 복제하여 기존 엔트리를 삭제한 후 활용하도록 권장합니다. ## 기본 설정 플래피 피쉬는 단일 클라이언트 기반의 게임으로, 다른 클라이언트와의 상태 동기화가 필요하지 않습니다. 따라서 기본 설정 단계에서는 서버와 동기화되는 컴포넌트를 비활성화하고, [original] | FlappyFish 월드를 리메이크해 나만의 FlappyFish를 만들 수 있습니다. FlappyFish 강의 학습 시 가이드를 보조 교재로 활용할 수 있습니다. 리메이크 월드는 완성본이므로, 해당 월드를 리메이크한 뒤 엔트리를 삭제 후 활용하시길 바랍니다. $$childList $$ # 기본 설정 플래피 피쉬는 게임으로 다른 클라이언트와의 동기화가 필요하지 않습니다. DefaultPlayer가 가진 컴포넌트 서버와 동기화하는 컴포넌트들을 비활성화해 기본 설정 변경해봅시다. 1. 서버와 위치를 자동으로 동기화하는 **Rig [chunk_id] | Guides:1100:0
[task] | knowledge_list [title] | WorldConfig [category] | Guides [rephrased] | 제시된 문서에 포함된 핵심 사실은 다음과 같습니다. 1. `RestrictedPlayerEntitySync` 설정을 활성화하면 플레이어 엔티티에 속한 네이티브 컴포넌트의 `[Sync]` 프로퍼티가 클라이언트에서 변경되어도 서버로 동기화되지 않으며, 이는 월드 보안을 강화하는 용도로 사용됩니다. 2. `RestrictedPlayerEntitySync`가 활성화된 상태에서 클라이언트 스크립트(`[client only]`)를 통해 `ChatBalloonComponent.Message` 프로퍼티에 문자열을 할당하더라도 서버로 동기화되 [original] | 플레이어 엔티티에 속한 네이티브 컴포넌트의 **Sync** 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 설정합니다. 이 설정을 활성화하면 월드의 보안을 강화할 수 있습니다. 예를 들어 클라이언트에서 `ChatBalloonComponent.Message`에 메시지를 입력하면 서버로 동기화하지 않기 때문에 다른 플레이어들의 화면에서는 말풍선이 나타나지 않습니다. ```lua [client only] void ShowChatBalloon() { local chatBalloon = self.Entity.ChatB [chunk_id] | Guides:1101:1
[task] | wikipedia [title] | WorldConfig [category] | Guides [rephrased] | # 메이플스토리 월드(WorldConfig) 설정 가이드 본 문서는 메이플스토리 월드(WorldConfig)에서 사용 가능한 주요 설정 옵션과 그 동작 방식을 설명합니다. ## RestrictedPlayerEntitySync `RestrictedPlayerEntitySync` 옵션은 플레이어 엔티티에 속한 네이티브 컴포넌트의 **Sync** 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 제어합니다. 이 설정을 활성화하면 월드의 보안을 강화할 수 있습니다. 예를 들어, 클라이언트에서 `ChatBalloonComp [original] | 플레이어 엔티티에 속한 네이티브 컴포넌트의 **Sync** 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 설정합니다. 이 설정을 활성화하면 월드의 보안을 강화할 수 있습니다. 예를 들어 클라이언트에서 `ChatBalloonComponent.Message`에 메시지를 입력하면 서버로 동기화하지 않기 때문에 다른 플레이어들의 화면에서는 말풍선이 나타나지 않습니다. ```lua [client only] void ShowChatBalloon() { local chatBalloon = self.Entity.ChatB [chunk_id] | Guides:1101:1
[task] | extract_knowledge [title] | 스크립트로 리메이크 월드 확장하기 [category] | Guides [rephrased] | # 더블 점프 확장: `ExtendPlayerControllerComponent` 활용 가이드 본 절에서는 `ExtendPlayerControllerComponent`를 사용하여 플레이어의 더블 점프 기능을 구현하는 방법을 다룹니다. 구현은 클라이언트 측 로직으로 이루어지며, 공기 중 점프 횟수 관리, 물리 힘 적용, 지형 착지 시 초기화, 그리고 피드백(음향/시각) 재생으로 구성됩니다. ## 1. 개념 설명 기존 플레이어 컨트롤러 컴포넌트(`ExtendPlayerControllerComponent`)에 새로운 메서드와 이벤트 [original] | 3. **ExtendPlayerControllerComponent**에 `ActionDoubleJump()` 함수를 새로 생성합니다. ```lua Method: [client] void ActionDoubleJump() { if self.LeftAirJumpCount <= 0 then return end local currentSpeed = self.Entity.RigidbodyComponent.RealMo [chunk_id] | Guides:1098:3
[task] | diverse_qa [title] | WorldConfig [category] | Guides [rephrased] | 질문: WorldConfig의 주요 기능은 무엇이며, 이 설정이 미치는 영향은 어떻게 되나요? 답변: WorldConfig는 크리에이터가 제작하는 월드의 다양한 설정을 변경할 수 있게 해주는 기능이며, 이 설정은 제작 중인 월드에 전반적인 영향을 끼칩니다. 질문: WorldConfig의 세부 설정 항목을 확인하려면 어떤 순서로 메뉴를 선택해야 하나요? 답변: 먼저 **Edit - WorldConfig**를 누르고, 그 후 **Workspace - WorldConfig**를 누르면 세부 설정 항목이 프로퍼티 에디터 창에 나타납니다. [original] | # 학습 과정 소개 메이플스토리 월드는 WorldConfig에서 다양한 월드 설정 기능을 제공합니다. WorldConfig의 기능은 제작 중인 월드에 전반적인 영향을 끼칩니다. ##### 참고 가이드 * [실행 제어](/docs/?postId=210) * [Effective MSW 2](/docs/?postId=560) * [패킷 변조 대비하기](/docs?postId=1102) * [예시로 알아보는 서버 검증](/docs?postId=1084) # WorldConfig 소개 WorldConfig는 크리에이터가 제작하는 월드의 [chunk_id] | Guides:1101:0
[task] | diverse_qa [title] | WorldConfig [category] | Guides [rephrased] | 질문: `RestrictedPlayerEntitySync` 설정의 주요 목적은 무엇인가요? 답변: 플레이어 엔티티에 속한 네이티브 컴포넌트의 Sync 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 설정하여 월드의 보안을 강화하는 것입니다. 질문: 클라이언트에서 `ChatBalloonComponent.Message`에 메시지를 입력했을 때, `RestrictedPlayerEntitySync`가 활성화되어 있으면 어떤 결과가 발생하나요? 답변: 서버로 동기화하지 않기 때문에 다른 플레이어들의 화면에서는 말풍선이 나타나 [original] | 플레이어 엔티티에 속한 네이티브 컴포넌트의 **Sync** 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 설정합니다. 이 설정을 활성화하면 월드의 보안을 강화할 수 있습니다. 예를 들어 클라이언트에서 `ChatBalloonComponent.Message`에 메시지를 입력하면 서버로 동기화하지 않기 때문에 다른 플레이어들의 화면에서는 말풍선이 나타나지 않습니다. ```lua [client only] void ShowChatBalloon() { local chatBalloon = self.Entity.ChatB [chunk_id] | Guides:1101:1
[task] | extract_knowledge [title] | 플래피 피쉬 리메이크 [category] | Guides [rephrased] | # 플래피 피쉬(FlappyFish) 리메이크 구현 가이드 본 절에서는 FlappyFish 월드를 기반으로 한 게임의 기본 설정, 캐릭터 움직임 로직, 그리고 카메라 바운드 조정에 필요한 mLua 스크립트 구현 방법을 다룹니다. ## 1. 기본 설정 FlappyFish는 단일 클라이언트 기반의 로컬 게임이므로 다른 클라이언트와의 동기화가 필요 없습니다. 따라서 `DefaultPlayer` 엔티티에서 서버 동기화 관련 컴포넌트를 비활성화하고, 아바타 외형을 물고기 스프라이트로 변경하는 설정이 필요합니다. ### 1.1 동기화 [original] | FlappyFish 월드를 리메이크해 나만의 FlappyFish를 만들 수 있습니다. FlappyFish 강의 학습 시 가이드를 보조 교재로 활용할 수 있습니다. 리메이크 월드는 완성본이므로, 해당 월드를 리메이크한 뒤 엔트리를 삭제 후 활용하시길 바랍니다. $$childList $$ # 기본 설정 플래피 피쉬는 게임으로 다른 클라이언트와의 동기화가 필요하지 않습니다. DefaultPlayer가 가진 컴포넌트 서버와 동기화하는 컴포넌트들을 비활성화해 기본 설정 변경해봅시다. 1. 서버와 위치를 자동으로 동기화하는 **Rig [chunk_id] | Guides:1100:0
[task] | distill [title] | 패킷 변조 대비하기 [category] | Guides [rephrased] | # 보안 및 최적화: 패킷 변조 대비 클라이언트에서 서버로 보낸 데이터는 변조될 수 있으므로, 중요한 로직의 실행제어를 `[server only]`로 설정하고 서버에서 데이터를 검증해야 합니다. ## 1. 보상 지급 로직 보호 보상 지급 요청은 클라이언트에서 보내지만, 실제 지급 함수는 반드시 `[server only]`여야 합니다. 클라이언트가 "보상 획득"을 직접 서버에 보내면 변조로 과도한 보상이나 타인 지급이 발생할 수 있습니다. **추천 호출 순서:** `client only` → `server` (검증) → `ser [original] | 클라이언트에서 서버로 패킷을 보낼 때 내용을 그대로 전송하게 되면, 변조 위험률이 높아집니다. 그러므로 중요한 함수는 실행제어를 **server only**로 설정해 패킷 반복 전송, 인자 값 변경 시도 등을 예방하는 것이 좋습니다. 또한 서버 함수는 클라이언트로부터 온 정보가 변조되지 않았는지 확인해야 합니다. 예를 들어 보상을 지급하는 함수를 작성해야 한다면 **client → server → server only** 함수 순서로 호출되도록 작성하는 것을 권장합니다. 이때 실제 보상을 지급하는 함수는 **server only** [chunk_id] | Guides:1102:1
[task] | wikipedia [title] | WorldConfig [category] | Guides [rephrased] | # 메이플스토리 월드 WorldConfig 설정 가이드 메이플스토리 월드(MapleStory Worlds)의 `WorldConfig` 컴포넌트는 제작 중인 월드에 적용되는 전반적인 환경 및 보안 설정을 제어하는 역할을 수행합니다. 이 설정은 월드의 기본 동작 방식을 정의하며, 클라이언트와 서버 간 상호작용 규칙을 포함합니다. ## WorldConfig 접근 방법 크리에이터는 메이플스토리 월드 에디터에서 `WorldConfig`에 접근하여 세부 설정을 변경할 수 있습니다. 접근 절차는 다음과 같습니다. 1. 상단 메뉴의 **Ed [original] | # 학습 과정 소개 메이플스토리 월드는 WorldConfig에서 다양한 월드 설정 기능을 제공합니다. WorldConfig의 기능은 제작 중인 월드에 전반적인 영향을 끼칩니다. ##### 참고 가이드 * [실행 제어](/docs/?postId=210) * [Effective MSW 2](/docs/?postId=560) * [패킷 변조 대비하기](/docs?postId=1102) * [예시로 알아보는 서버 검증](/docs?postId=1084) # WorldConfig 소개 WorldConfig는 크리에이터가 제작하는 월드의 [chunk_id] | Guides:1101:0
[task] | extract_knowledge [title] | WorldConfig [category] | Guides [rephrased] | # WorldConfig 설정 `WorldConfig`는 월드의 보안, 언어, 작업 공간, 화면 비율, 그리고 조명 렌더링 방식을 제어하는 글로벌 설정 컴포넌트입니다. ## 1. RestrictedPlayerEntitySync ### 개념 플레이어 엔티티에 속한 네이티브 컴포넌트의 `Sync` 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 하는 보안 설정입니다. 이 설정을 활성화하면 클라이언트에서 조작된 값이 서버에 전달되지 않아 월드의 보안을 강화할 수 있습니다. ### 예외 사항 다음 네이티브 컴포넌트는 [original] | 플레이어 엔티티에 속한 네이티브 컴포넌트의 **Sync** 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 설정합니다. 이 설정을 활성화하면 월드의 보안을 강화할 수 있습니다. 예를 들어 클라이언트에서 `ChatBalloonComponent.Message`에 메시지를 입력하면 서버로 동기화하지 않기 때문에 다른 플레이어들의 화면에서는 말풍선이 나타나지 않습니다. ```lua [client only] void ShowChatBalloon() { local chatBalloon = self.Entity.ChatB [chunk_id] | Guides:1101:1
[task] | distill [title] | 패킷 변조 대비하기 [category] | Guides [rephrased] | # 패킷 변조 대비 가이드 서버-클라이언트 간 통신 데이터(패킷)의 악의적 변조로 인한 월드 보안 위협을 방지하기 위한 원칙과 대응 방식을 설명합니다. ## 패킷 통신 구조 메이플스토리 월드에서 `server` 실행 공간 함수 호출 시, 클라이언트는 **엔티티, 컴포넌트, 함수, 인자** 정보를 패킷으로 서버에 전송합니다. 서버는 해당 정보에 따라 함수를 실행합니다. ## 주요 변조 유형 및 대응 1. **데이터 값 변조**: 보스 처치 보상(메소, 경험치, 아이템) 등 클라이언트가 전송하는 수치 데이터를 임의로 변경해 부당한 [original] | # 학습 과정 소개 서버와 클라이언트가 패킷을 주고 받을 때 데이터 변조가 발생해 크리에이터의 월드에 불편을 초래할 수 있습니다. 패킷 변조를 예방해 쾌적한 월드를 만들기 위해 패킷의 개념과 예방 방법을 알아봅시다. ##### 참고 가이드 * [WorldConfig](/docs/?postId=1101) * [예시로 알아보는 서버 검증](/docs?postId=1084) # 패킷 알아보기 **패킷**은 서버와 클라이언트가 주고받는 데이터의 단위를 말합니다. 메이플스토리 월드에서는 함수의 실행 공간에 따라 클라이언트와 서버가 통 [chunk_id] | Guides:1102:0