[task] | distill [title] | Tables [category] | Guides [rephrased] | **광부 시뮬레이터 리메이크: 광맥 데이터셋 (Tables)** 레벨 3까지 기본 데이터가 포함되어 있으며, 추가 레벨은 행을 추가해 정의합니다. | 필드명 | 타입/제약 | 설명 | | :--- | :--- | :--- | | `Level` | - | 광맥 레벨 | | `HP` | **숫자** | 광맥 최대 체력 | | `BonusGameChance` | **실수** | 채굴 시 보너스 게임 발생 확률 (예: 0.1) | | `Bonus_JewerlyChance` | **실수** | 보너스 성공 시 보석 보상 확률 | | `B [original] | 광맥 정보를 담은 데이터셋입니다. 광부 시뮬레이터 리메이크 월드에는 레벨 3까지의 광맥 데이터가 기입되어 있습니다. 더 높은 레벨의 광백이 필요한 경우 행을 추가해 데이터를 입력합니다. | 이름 | 설명 | | --- | --- | |Level | 광맥의 레벨입니다. | | HP | 광맥의 최대 체력입니다. 반드시 **숫자**만 입력해야 합니다. | | BonusGameChance | 광맥을 캘 때 보너스 게임이 등장하는 확률입니다. 반드시 **실수**로만 입력해야 합니다. 예) 0.1 | | Bonus_JewerlyChanc [chunk_id] | Guides:1083:2
[task] | diverse_qa [title] | Tables [category] | Guides [rephrased] | 질문: 광부 시뮬레이터 리메이크의 맵 정보 테이블에서 새로운 마을이나 광산을 추가하려면 어떻게 해야 하나요? 답변: 행을 추가해야 합니다. 질문: TownName과 MineName 열에는 어떤 값을 입력해야 하며, 번역 결과는 어디에 입력하나요? 답변: Key 값을 입력해야 하며, 번역 결과는 LocalizationTable에 입력합니다. 질문: RecPower_min1의 권장 책정 기준은 무엇인가요? 답변: 광산에 필요한 채광력은 광맥의 체력 기준 1/4 수준으로 책정을 권장합니다. 질문: RecPower_max1의 권장 책 [original] | 맵 정보에 대한 테이블입니다. 새로운 마을, 광산을 추가하기 위해선 행을 추가해야 합니다. **TownName, MineName** 열에는 **Key** 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | |TownName| 마을 이름입니다. **key** 값을 입력해야 합니다.| |MineName| 광산 이름입니다. **key** 값을 입력해야 합니다. | |RecPower_min1| 광산 1층의 최소 권장 채광력입니다. 광산에 필요한 채광력은 광맥의 [chunk_id] | Guides:1083:1
[task] | distill [title] | Tables [category] | Guides [rephrased] | # CurrencyInfo 골드 외 재화를 추가할 때 행을 추가하는 데이터셋입니다. | 이름 | 설명 | | --- | --- | | Name | 재화 이름. **Key** 값 입력. | | RUID | 재화 이미지 RUID. | | Desc | 재화 설명 (인벤토리 툴팁). **Key** 값 입력. | > **Dest** 열에 Key 값 입력, 번역 결과는 `LocalizationTable`에 입력. # EquipmentInfo 레벨 5 이후 장비를 추가할 때 행을 추가하는 데이터셋입니다. `Name`, `FlavorText [original] | # CurrencyInfo 재화 종류를 추가할 때 사용하는 데이터셋입니다. 골드 외의 다른 재화를 추가할 경우 행을 추가해 사용합니다. **Dest** 열에는 Key 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | | Name | 재화의 이름입니다. **key** 값을 입력해야 합니다. | | RUID | 재화를 나타내는 이미지의 RUID입니다. | | Desc | 재화의 설명을 입력합니다. 인벤토리에서 재화 위에 마우스를 올리면 이 설명을 보여줍니다. [chunk_id] | Guides:1083:0
[task] | diverse_qa [title] | UI Group [category] | Guides [rephrased] | 질문: 광부 시뮬레이터에서 광산에 입장하면 활성화되는 HUD 컴포넌트의 이름은 무엇인가요? 답변: 광산에 입장하면 활성화되는 HUD 컴포넌트는 `MineHUD`입니다. 질문: `TownHUD`는 어떤 장소에서 활성화되며, 어떤 요소들을 포함하나요? 답변: `TownHUD`는 마을에 입장하면 활성화되며, 메뉴 열기 버튼과 메뉴들이 포함됩니다. 질문: 항상 활성화되는 HUD 컴포넌트의 이름은 무엇인가요? 답변: 항상 활성화되는 HUD 컴포넌트는 `HUD`입니다. 질문: `MineralExchangeGroup` 안에 포함된 UI 컴 [original] | 광부 시뮬레이터를 구성하는 UI Group은 다음과 같습니다. # HUDGroup #### MineHUD 광산에 입장하면 활성화되는 HUD입니다. 광산에서의 시야 범위, 탐험 도구, 깊이, 머무른 시간 등이 포함됩니다. #### TownHUD 마을에 입장하면 활성화되는 HUD입니다. 메뉴 열기 버튼, 메뉴들이 포함됩니다. #### HUD 항상 활성화되는 HUD입니다. # MineralExchangeGroup #### MineralExchange 광물 상점 UI입니다. # EquipmentShopGroup ### [chunk_id] | Guides:1082:0
[task] | extract_knowledge [title] | 공동 제작 그룹 멤버의 등급과 권한 [category] | Guides [rephrased] | # 공동 제작 그룹 멤버의 등급과 권한 ## 1. 개념 설명 메이플스토리 월드의 공동 제작 그룹에서는 멤버의 역할에 따라 등급이 지정되며, 등급별로 허용되는 기능 권한이 상이합니다. 그룹장은 멤버의 등급을 설정하여 작업 범위를 제어할 수 있습니다. 제공된 문서에 따르면, 그룹 내 등급은 다음과 같이 분류됩니다: * **그룹장 (Owner)** * **매니저 (Manager)** * **개발책임자 (Lead Developer)** * **개발자 (Developer)** * **운영책임자 (Lead Operator [original] | 그룹 멤버 등급별로 주어지는 권한은 아래와 같습니다. 그룹장은 아래 내용을 참고하여 각 멤버의 등급을 적절하게 설정할 수 있습니다. | 기능 설명 | 그룹장 | 매니저 | 개발책임자 | 개발자 | 운영책임자 | 운영자 | 일반 | | --- | --- | --- | --- | --- | --- | --- | --- | | CREATOR 마크 표시 | O | O | O | O | O | O | X | | LocaleDataSet 동기화 권한 | O | O | O | O | X | X | X | | MOD 파일 Import/Expor [chunk_id] | Guides:1077:1
[task] | wikipedia [title] | Tables [category] | Guides [rephrased] | **광부 시뮬레이터 리메이크 Tables** 본 데이터셋은 광부 시뮬레이터 리메이크 월드에서 사용되는 광맥의 물리적 특성 및 보상 확률 정보를 저장하기 위한 테이블입니다. 기본적으로 레벨 3까지의 광맥 데이터가 기입되어 있으며, 더 높은 레벨의 광맥을 추가해야 하는 경우 해당 행을 직접 추가하여 데이터를 입력할 수 있습니다. 데이터셋에는 다음 필드가 포함되어 있습니다. 첫째, **Level** 필드는 광맥의 레벨을 나타냅니다. 둘째, **HP** 필드는 일반 광맥의 최대 체력을 정의하며, 이 값에는 반드시 정수 형태의 숫자만 [original] | 광맥 정보를 담은 데이터셋입니다. 광부 시뮬레이터 리메이크 월드에는 레벨 3까지의 광맥 데이터가 기입되어 있습니다. 더 높은 레벨의 광백이 필요한 경우 행을 추가해 데이터를 입력합니다. | 이름 | 설명 | | --- | --- | |Level | 광맥의 레벨입니다. | | HP | 광맥의 최대 체력입니다. 반드시 **숫자**만 입력해야 합니다. | | BonusGameChance | 광맥을 캘 때 보너스 게임이 등장하는 확률입니다. 반드시 **실수**로만 입력해야 합니다. 예) 0.1 | | Bonus_JewerlyChanc [chunk_id] | Guides:1083:2
[task] | extract_knowledge [title] | UI Group [category] | Guides [rephrased] | # 광부 시뮬레이터 UI Group 구성 광부 시뮬레이터는 게임 진행 상황(광산/마을)과 상호작용(채굴, 상점, 결과 확인)에 따라 활성화되는 여러 UI Group으로 구성됩니다. 각 Group은 특정 컨텍스트에서 표시될 UI 컴포넌트를 포함합니다. ## 1. UI Group 구조 게임의 UI는 기능별로 다음과 같은 Group으로 분류됩니다. | UI Group | 포함된 컴포넌트 | 활성화 조건/역할 | | :--- | :--- | :--- | | **HUDGroup** | `MineHUD`, `TownHUD`, `HUD` [original] | 광부 시뮬레이터를 구성하는 UI Group은 다음과 같습니다. # HUDGroup #### MineHUD 광산에 입장하면 활성화되는 HUD입니다. 광산에서의 시야 범위, 탐험 도구, 깊이, 머무른 시간 등이 포함됩니다. #### TownHUD 마을에 입장하면 활성화되는 HUD입니다. 메뉴 열기 버튼, 메뉴들이 포함됩니다. #### HUD 항상 활성화되는 HUD입니다. # MineralExchangeGroup #### MineralExchange 광물 상점 UI입니다. # EquipmentShopGroup ### [chunk_id] | Guides:1082:0
[task] | distill [title] | Tables [category] | Guides [rephrased] | # 광부 시뮬레이터 리메이크 Tables ## MapInfo 새로운 마을/광산 추가 시 행을 추가합니다. `TownName`, `MineName`에는 **Key** 값을 입력하며, 번역은 `LocalizationTable`에 등록합니다. | 필드 | 설명 | | :--- | :--- | | `TownName` | 마을 이름 (Key 값) | | `MineName` | 광산 이름 (Key 값) | | `RecPower_min1~3` | N층 최소 권장 채광력. 해당 층 광맥 체력의 1/4 수준 권장. **숫자**만 입력. | | [original] | 맵 정보에 대한 테이블입니다. 새로운 마을, 광산을 추가하기 위해선 행을 추가해야 합니다. **TownName, MineName** 열에는 **Key** 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | |TownName| 마을 이름입니다. **key** 값을 입력해야 합니다.| |MineName| 광산 이름입니다. **key** 값을 입력해야 합니다. | |RecPower_min1| 광산 1층의 최소 권장 채광력입니다. 광산에 필요한 채광력은 광맥의 [chunk_id] | Guides:1083:1
[task] | knowledge_list [title] | Tables [category] | Guides [rephrased] | 1. 광부 시뮬레이터 리메이크 월드의 Tables 데이터셋에는 레벨 3까지의 광맥 데이터가 기본으로 기입되어 있으며, 더 높은 레벨의 광맥이 필요할 경우 해당 데이터셋에 행을 추가하여 데이터를 입력해야 합니다. 2. 광맥 데이터셋의 `Level` 필드는 광맥의 레벨을 나타내며, 문서상 명시된 타입 제약이나 특수 입력 형식 규칙은 별도로 제시되지 않았습니다. 3. 광맥 데이터셋의 `HP` 필드는 광맥의 최대 체력을 나타내며, 반드시 숫자만 입력해야 합니다. 4. 광맥 데이터셋의 `BonusGameChance` 필드는 광맥을 캘 때 보 [original] | 광맥 정보를 담은 데이터셋입니다. 광부 시뮬레이터 리메이크 월드에는 레벨 3까지의 광맥 데이터가 기입되어 있습니다. 더 높은 레벨의 광백이 필요한 경우 행을 추가해 데이터를 입력합니다. | 이름 | 설명 | | --- | --- | |Level | 광맥의 레벨입니다. | | HP | 광맥의 최대 체력입니다. 반드시 **숫자**만 입력해야 합니다. | | BonusGameChance | 광맥을 캘 때 보너스 게임이 등장하는 확률입니다. 반드시 **실수**로만 입력해야 합니다. 예) 0.1 | | Bonus_JewerlyChanc [chunk_id] | Guides:1083:2
[task] | wikipedia [title] | Tables [category] | Guides [rephrased] | # CurrencyInfo `CurrencyInfo` 데이터셋은 광부 시뮬레이터 리메이크에서 재화 종류를 정의할 때 사용됩니다. 골드 외에 다른 재화를 추가해야 할 경우, 해당 데이터셋에 새로운 행을 추가하여 관리합니다. 이 데이터셋의 `Dest` 열에는 `Key` 값을 입력해야 하며, 이에 해당하는 번역 결과는 `LocalizationTable`에 별도로 기록합니다. 데이터셋의 각 열은 다음과 같은 역할을 수행합니다. `Name` 열은 재화의 이름을 나타내며, 반드시 `key` 값을 입력해야 합니다. `RUID` 열은 해당 재 [original] | # CurrencyInfo 재화 종류를 추가할 때 사용하는 데이터셋입니다. 골드 외의 다른 재화를 추가할 경우 행을 추가해 사용합니다. **Dest** 열에는 Key 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | | Name | 재화의 이름입니다. **key** 값을 입력해야 합니다. | | RUID | 재화를 나타내는 이미지의 RUID입니다. | | Desc | 재화의 설명을 입력합니다. 인벤토리에서 재화 위에 마우스를 올리면 이 설명을 보여줍니다. [chunk_id] | Guides:1083:0
[task] | distill [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | # 서버 검증 가이드 플레이어 엔티티에서 서버 함수 호출 시 패킷 전송이 발생하며, 중요 데이터 전송 시 서버에서 재검증하여 보안을 강화해야 합니다. ## 검증 원칙 * **서버 판정 필수**: 클라이언트 변조 및 패킷 변조 방지를 위해 중요 데이터 관련 판정은 반드시 서버에서 수행합니다. * **재검증 권장**: 클라이언트에서 사전 판정을 거쳤더라도, 중요 데이터 요청 시 서버에서 다시 검증하는 것을 권장합니다. * **UI 처리**: UI 엔티티는 클라이언트에만 존재하므로, UI 동작은 서버에서 클라이언트로 전송하여 반영하도 [original] | # 학습 과정 소개 플레이어 엔티티에서 서버 함수를 호출할 경우 '패킷'을 통해 데이터를 전송합니다. 중요한 데이터를 패킷에 담아 보낼 경우, 서버는 받은 패킷을 바로 반영하지 않고 한 번 더 검증해 보안을 강화해야 합니다. 이번 가이드에서는 서버 검증 스크립트를 작성하고, 안정적인 서버를 구성하는 방법을 알아봅니다. ##### 참고 가이드 * [패킷 변조 대비](/docs/?postId=1102) * [WorldConfig](/docs/?postId=1101) # 검증 시 유의 사항 클라이언트 변조 및 패킷 변조 예방을 위 [chunk_id] | Guides:1084:0
[task] | knowledge_list [title] | Tables [category] | Guides [rephrased] | 제시된 원문에 포함된 정보만 바탕으로 핵심 사실을 추출하여 목록으로 정리했습니다. 원문에 명시되지 않은 `MapInfo`의 세부 내용이나 API 함수, 매개변수, 반환 타입, 동기화/서버·클라이언트 실행 공간 제약은 존재하지 않으므로 생략합니다. * `CurrencyInfo` 데이터셋은 골드 외의 재화를 추가할 때 행을 추가하여 사용하며, `Name`과 `Desc` 열에는 `key` 값을 입력해야 합니다. * `CurrencyInfo`의 `Name` 열은 재화의 이름을 나타내며, `RUID` 열은 재화를 나타내는 이미지의 [original] | # CurrencyInfo 재화 종류를 추가할 때 사용하는 데이터셋입니다. 골드 외의 다른 재화를 추가할 경우 행을 추가해 사용합니다. **Dest** 열에는 Key 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | | Name | 재화의 이름입니다. **key** 값을 입력해야 합니다. | | RUID | 재화를 나타내는 이미지의 RUID입니다. | | Desc | 재화의 설명을 입력합니다. 인벤토리에서 재화 위에 마우스를 올리면 이 설명을 보여줍니다. [chunk_id] | Guides:1083:0
[task] | knowledge_list [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | 제시된 문서에는 `mLua` 코드 블록, 구체적인 API 메서드 명, 매개변수, 반환 타입, 또는 `[server only]`/`[client only]` 실행 공간 태그가 포함되어 있지 않습니다. 문서의 내용은 주로 개념적 설명, UI/NPC 에디터 설정 가이드, 그리고 보안 원칙에 국한되어 있습니다. 따라서 요청하신 "API 이름·매개변수·반환 타입·동기화/서버·클라이언트 제약"을 명시한 기술적 사실은 원문에 존재하지 않습니다. 원문에 포함된 **개념적 사실 및 설계 원칙**만 독립적 문장으로 정리하면 다음과 같습니다. 1. [original] | # 학습 과정 소개 플레이어 엔티티에서 서버 함수를 호출할 경우 '패킷'을 통해 데이터를 전송합니다. 중요한 데이터를 패킷에 담아 보낼 경우, 서버는 받은 패킷을 바로 반영하지 않고 한 번 더 검증해 보안을 강화해야 합니다. 이번 가이드에서는 서버 검증 스크립트를 작성하고, 안정적인 서버를 구성하는 방법을 알아봅니다. ##### 참고 가이드 * [패킷 변조 대비](/docs/?postId=1102) * [WorldConfig](/docs/?postId=1101) # 검증 시 유의 사항 클라이언트 변조 및 패킷 변조 예방을 위 [chunk_id] | Guides:1084:0
[task] | knowledge_list [title] | Tables [category] | Guides [rephrased] | 제시된 문서에는 `Tables` 가이드에 포함된 `MapInfo`, `MineralInfo`, `ToolInfo` 테이블의 구조와 필드 정의, 그리고 `VeinInfo`의 제목만 포함되어 있습니다. `VeinInfo`의 구체적인 필드나 설명은 원문에 없으므로 생략합니다. 또한, 이 테이블들은 mLua 스크립트 내의 컴포넌트 Property나 메서드가 아니라 데이터셋(데이터 테이블)으로 정의되므로, 서버/클라이언트 실행 공간 제약이나 mLua 함수 시그니처는 적용되지 않으며, 데이터 입력 규칙과 연관성만 정리합니다. **핵심 사실 [original] | 맵 정보에 대한 테이블입니다. 새로운 마을, 광산을 추가하기 위해선 행을 추가해야 합니다. **TownName, MineName** 열에는 **Key** 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | |TownName| 마을 이름입니다. **key** 값을 입력해야 합니다.| |MineName| 광산 이름입니다. **key** 값을 입력해야 합니다. | |RecPower_min1| 광산 1층의 최소 권장 채광력입니다. 광산에 필요한 채광력은 광맥의 [chunk_id] | Guides:1083:1
[task] | wikipedia [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | # 서버 검증: 보안 및 최적화 예시 ## 학습 과정 소개 플레이어 엔티티가 서버 함수를 호출할 때 데이터는 '패킷'을 통해 전송됩니다. 중요한 데이터를 패킷에 담아 전송하는 경우, 서버는 수신된 패킷을 즉시 반영하지 않고 한 번 더 검증하여 보안을 강화해야 합니다. 본 가이드에서는 서버 검증 스크립트를 작성하고 안정적인 서버 환경을 구축하는 방법을 다룹니다. **참고 가이드** * [패킷 변조 대비](/docs/?postId=1102) * [WorldConfig](/docs/?postId=1101) ## 검증 시 유의 사항 [original] | # 학습 과정 소개 플레이어 엔티티에서 서버 함수를 호출할 경우 '패킷'을 통해 데이터를 전송합니다. 중요한 데이터를 패킷에 담아 보낼 경우, 서버는 받은 패킷을 바로 반영하지 않고 한 번 더 검증해 보안을 강화해야 합니다. 이번 가이드에서는 서버 검증 스크립트를 작성하고, 안정적인 서버를 구성하는 방법을 알아봅니다. ##### 참고 가이드 * [패킷 변조 대비](/docs/?postId=1102) * [WorldConfig](/docs/?postId=1101) # 검증 시 유의 사항 클라이언트 변조 및 패킷 변조 예방을 위 [chunk_id] | Guides:1084:0
[task] | diverse_qa [title] | Tables [category] | Guides [rephrased] | 질문: 광부 시뮬레이터 리메이크 Tables 문서에서 설명하는 데이터셋의 주요 용도는 무엇인가요? 답변: 광맥 정보를 담고 있습니다. 질문: 현재 문서에 언급된 광부 시뮬레이터 리메이크 월드에는 몇 레벨까지의 광맥 데이터가 기입되어 있나요? 답변: 레벨 3까지의 광맥 데이터가 기입되어 있습니다. 질문: 더 높은 레벨의 광맥 데이터를 추가하려면 어떻게 해야 하나요? 답변: 행을 추가해 데이터를 입력해야 합니다. 질문: 'Level' 열의 설명은 무엇인가요? 답변: 광맥의 레벨입니다. 질문: 'HP' 열에 값을 입력할 때 어떤 [original] | 광맥 정보를 담은 데이터셋입니다. 광부 시뮬레이터 리메이크 월드에는 레벨 3까지의 광맥 데이터가 기입되어 있습니다. 더 높은 레벨의 광백이 필요한 경우 행을 추가해 데이터를 입력합니다. | 이름 | 설명 | | --- | --- | |Level | 광맥의 레벨입니다. | | HP | 광맥의 최대 체력입니다. 반드시 **숫자**만 입력해야 합니다. | | BonusGameChance | 광맥을 캘 때 보너스 게임이 등장하는 확률입니다. 반드시 **실수**로만 입력해야 합니다. 예) 0.1 | | Bonus_JewerlyChanc [chunk_id] | Guides:1083:2
[task] | extract_knowledge [title] | 다각형 그리기 [category] | Guides [rephrased] | # 다각형 렌더링 (Polygon Rendering) ## 1. 개념 설명 `PolygonRendererComponent`는 월드 공간 내에서 정의된 점(Vertices)을 순서대로 연결하여 2차원 다각형을 시각화하는 컴포넌트입니다. 이 컴포넌트는 정점의 배열 순서에 의존하며, 특정 기하학적 조건이 충족되어야만 올바르게 렌더링됩니다. 주요 동작 원리는 다음과 같습니다: * **순차적 연결**: 입력된 점들의 인덱스 순서대로 선분이 연결됩니다. * **비교차 조건**: 연결되는 선분들이 서로 교차하면 다각형 내부가 정의되 [original] | # 학습 과정 안내 PolygonRendererComponent를 활용해 다각형을 월드에 자유롭게 그릴 수 있습니다. # PolygonRendererComponent `PolygonRendererComponent`는 점을 이어 월드에 다각형을 그릴 수 있습니다. 추가된 점의 순서를 따라 다각형이 그려집니다. 만약 점을 이을 때 선이 교차하면 다각형은 그려지지 않습니다. 다각형이 그려지는지 확인이 필요할 때는 `IsDrawable()` 함수를 사용해 확인할 수 있습니다. 아래와 같이 점들의 좌표를 입력하면 (0,0) (3,2) [chunk_id] | Guides:1080:0
[task] | wikipedia [title] | Tables [category] | Guides [rephrased] | # 광부 시뮬레이터 리메이크: 데이터 테이블 구조 이 섹션은 '광부 시뮬레이터 리메이크' 맵의 핵심 데이터 구조를 정의하는 네 가지 주요 테이블(`MapInfo`, `MineralInfo`, `ToolInfo`, `VeinInfo`)에 대해 설명합니다. 각 테이블은 행(Row) 단위로 데이터를 관리하며, 새로운 마을, 광산, 광물, 도구, 광맥 등을 추가하기 위해서는 해당 테이블에 새로운 행을 직접 추가해야 합니다. ## MapInfo (맵 정보) `MapInfo` 테이블은 마을과 광산의 기본 설정 및 진행 난이도를 제어하는 [original] | 맵 정보에 대한 테이블입니다. 새로운 마을, 광산을 추가하기 위해선 행을 추가해야 합니다. **TownName, MineName** 열에는 **Key** 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | |TownName| 마을 이름입니다. **key** 값을 입력해야 합니다.| |MineName| 광산 이름입니다. **key** 값을 입력해야 합니다. | |RecPower_min1| 광산 1층의 최소 권장 채광력입니다. 광산에 필요한 채광력은 광맥의 [chunk_id] | Guides:1083:1
[task] | diverse_qa [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | 질문: 플레이어 엔티티에서 서버 함수를 호출할 때 데이터는 어떤 매체를 통해 전송되는가? 답변: 플레이어 엔티티에서 서버 함수를 호출할 경우 '패킷'을 통해 데이터를 전송합니다. 질문: 중요한 데이터를 패킷에 담아 보낼 때 서버는 어떤 처리를 해야 하는가? 답변: 서버는 받은 패킷을 바로 반영하지 않고 한 번 더 검증해 보안을 강화해야 합니다. 질문: 월드 제작 시 모든 판정을 서버에서 해야 하는가? 답변: 월드 제작 시 모든 판정을 서버에서 할 필요는 없으나, 중요한 데이터를 다루는 판정은 서버에서 이뤄져야 합니다. 질문: [original] | # 학습 과정 소개 플레이어 엔티티에서 서버 함수를 호출할 경우 '패킷'을 통해 데이터를 전송합니다. 중요한 데이터를 패킷에 담아 보낼 경우, 서버는 받은 패킷을 바로 반영하지 않고 한 번 더 검증해 보안을 강화해야 합니다. 이번 가이드에서는 서버 검증 스크립트를 작성하고, 안정적인 서버를 구성하는 방법을 알아봅니다. ##### 참고 가이드 * [패킷 변조 대비](/docs/?postId=1102) * [WorldConfig](/docs/?postId=1101) # 검증 시 유의 사항 클라이언트 변조 및 패킷 변조 예방을 위 [chunk_id] | Guides:1084:0
[task] | distill [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | ```lua [server only][self] HandleTriggerLeaveEvent(TriggerLeaveEvent event) { local TriggerBodyEntity = event.TriggerBodyEntity if self.triggerNpcEntity == TriggerBodyEntity then self.triggerNpcEntity.NpcComponent:OnRequestOpenDialog(false) self.triggerNpcEntity = nil end [original] | --------------------------------- log('triggerLeave') -- Parameters local TriggerBodyEntity = event.TriggerBodyEntity --------------------------------------------------------- if self.triggerNpcEntity == TriggerBodyEntity then self.triggerNpcEntity [chunk_id] | Guides:1084:2
[task] | diverse_qa [title] | Tables [category] | Guides [rephrased] | 질문: CurrencyInfo 데이터셋은 어떤 목적으로 사용되나요? 답변: 골드 외의 다른 재화를 추가할 때 사용하는 데이터셋입니다. 질문: CurrencyInfo에서 'Dest' 열에는 무엇을 입력해야 하나요? 답변: Key 값을 입력해야 합니다. 질문: CurrencyInfo의 'Name' 열에 입력할 값의 특징은 무엇인가요? 답변: 재화의 이름을 나타내며, key 값을 입력해야 합니다. 질문: CurrencyInfo에서 'RUID' 열의 역할은 무엇인가요? 답변: 재화를 나타내는 이미지의 RUID를 입력하는 것입니다. [original] | # CurrencyInfo 재화 종류를 추가할 때 사용하는 데이터셋입니다. 골드 외의 다른 재화를 추가할 경우 행을 추가해 사용합니다. **Dest** 열에는 Key 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | | Name | 재화의 이름입니다. **key** 값을 입력해야 합니다. | | RUID | 재화를 나타내는 이미지의 RUID입니다. | | Desc | 재화의 설명을 입력합니다. 인벤토리에서 재화 위에 마우스를 올리면 이 설명을 보여줍니다. [chunk_id] | Guides:1083:0
[task] | extract_knowledge [title] | 프로파일러로 월드 성능 분석하기 [category] | Guides [rephrased] | # 프로파일러를 활용한 월드 성능 분석 및 최적화 본 절에서는 메이플스토리 월드의 프로파일러 기능을 통해 `Sync Property`, `TimerService`, `Tween Logic`의 성능 지표를 모니터링하고, 이를 기반으로 발생하는 성능 저하를 방지하는 방법을 설명합니다. ## 1. Sync Property `Sync Property`는 클라이언트와 서버 간 데이터 동기화를 담당합니다. 동기화 횟수와 데이터 양은 월드의 네트워크 부하와 처리 성능에 직접적인 영향을 미칩니다. ### 1.1 성능 지표 | 항목 | 설 [original] | Sync Property의 동기화 횟수입니다. | 항목 | 설명 | | --- | --- | | Send Count | 컴포넌트 단위의 동기화 및 프로퍼티 별 동기화 송신 횟수입니다. | | Receive Count | 컴포넌트 단위의 동기화 및 프로퍼티 별 동기화 수신 횟수입니다. | ##### Sync Property Count 관련 성능 저하 개선 Sync Property Count가 많아지면 FPS나 Tick에 악영향을 끼칠 수 있습니다. Sync Property는 None-Sync Property와 달리 내부적으로 동기 [chunk_id] | Guides:1078:3
[task] | wikipedia [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | 제시된 원문은 메이플스토리 월드 스크립트에서 트리거 컴포넌트(`TriggerComponent`)의 이벤트 핸들러를 사용하여 NPC와의 상호작용을 관리하는 코드 조각과, 이를 기반으로 NPC 컴포넌트를 생성 및 설정하는 후속 단계에 대한 설명입니다. 아래 코드는 `HandleTriggerLeaveEvent`와 `HandleTriggerEnterEvent` 두 가지 이벤트 핸들러를 정의합니다. `HandleTriggerLeaveEvent`는 서버 공간에서 실행되며, 트리거 영역을 벗어난 엔티티가 이전에 기록된 `self.trigger [original] | --------------------------------- log('triggerLeave') -- Parameters local TriggerBodyEntity = event.TriggerBodyEntity --------------------------------------------------------- if self.triggerNpcEntity == TriggerBodyEntity then self.triggerNpcEntity [chunk_id] | Guides:1084:2
[task] | diverse_qa [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | 질문: 문서의 예시에서 NPC와 플레이어가 상호작용하기 위해 어떤 키 입력을 사용하나요? 답변: `E` 키를 누르면 UI가 열리고, `ESC` 키를 누르면 UI가 닫히도록 만듭니다. 질문: `MyPlayerComponent` 스크립트에서 `triggerNpcEntity` 프로퍼티의 동기화(Sync) 속성은 무엇으로 설정되어 있나요? 답변: `[None]`으로 설정되어 있습니다. 질문: `key`와 `gold` 프로퍼티의 동기화 속성은 무엇으로 설정되어 있나요? 답변: `[Sync]`으로 설정되어 있습니다. 질문: `OnSync [original] | NPC와 플레이어가 상호작용할 수 있게 만들어봅시다. NPC의 trigger 범위에 플레이어가 있을 때 `E` 키를 누르면 UI가 열리고, `ESC` 키를 누르면 UI가 닫히도록 만듭니다. 1. 새로운 **MyPlayerComponent**를 생성하고, **DefaultPlayer**에 추가합니다. 2. **MyPlayerComponent**에 아래와 같이 작성합니다. ```lua Property: [None] Entity triggerNpcEntity = nil [Sync] numb [chunk_id] | Guides:1084:1
[task] | extract_knowledge [title] | Tables [category] | Guides [rephrased] | # 광부 시뮬레이터 리메이크: 데이터 테이블 구성 본 절에서는 광부 시뮬레이터 리메이크 프로젝트에서 사용되는 핵심 데이터 테이블(`CurrencyInfo`, `EquipmentInfo`, `LocalizationTable`)의 구조와 필드 의미를 설명합니다. 이 테이블들은 게임 내 재화, 장비, 그리고 다국어 텍스트를 정의하는 데 사용됩니다. ## 1. CurrencyInfo (재화 정보 테이블) `CurrencyInfo` 테이블은 게임 내 재화(Currency)를 정의하는 데이터셋입니다. 기본 제공되는 골드 외에 새로운 재화 [original] | # CurrencyInfo 재화 종류를 추가할 때 사용하는 데이터셋입니다. 골드 외의 다른 재화를 추가할 경우 행을 추가해 사용합니다. **Dest** 열에는 Key 값을 입력하고, 번역 결과는 LocalizationTable에 입력합니다. | 이름 | 설명 | | --- | --- | | Name | 재화의 이름입니다. **key** 값을 입력해야 합니다. | | RUID | 재화를 나타내는 이미지의 RUID입니다. | | Desc | 재화의 설명을 입력합니다. 인벤토리에서 재화 위에 마우스를 올리면 이 설명을 보여줍니다. [chunk_id] | Guides:1083:0
[task] | distill [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | **[Guides] 기본 제작 가이드 > 보안 및 최적화 예시로 알아보는 서버 검증** NPC 트리거 범위 내 플레이어가 `E` 키로 대화 UI를 열고, `ESC` 키로 닫는 상호작용 구현 예시입니다. ### 1. 설정 - **MyPlayerComponent** 생성 후 **DefaultPlayer**에 추가. - 클라이언트에서 키 입력을 감지하여 NPC의 대화 상태를 제어합니다. ### 2. 코드 구현 (`MyPlayerComponent`) ```lua Property: [None] Entity triggerNpcEntit [original] | NPC와 플레이어가 상호작용할 수 있게 만들어봅시다. NPC의 trigger 범위에 플레이어가 있을 때 `E` 키를 누르면 UI가 열리고, `ESC` 키를 누르면 UI가 닫히도록 만듭니다. 1. 새로운 **MyPlayerComponent**를 생성하고, **DefaultPlayer**에 추가합니다. 2. **MyPlayerComponent**에 아래와 같이 작성합니다. ```lua Property: [None] Entity triggerNpcEntity = nil [Sync] numb [chunk_id] | Guides:1084:1
[task] | diverse_qa [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | 질문: 제공된 코드에서 `HandleTriggerLeaveEvent` 핸들러가 수행하는 주요 동작은 무엇인가요? 답변: 트리거를 벗어난 엔티티(`TriggerBodyEntity`)가 이전에 저장된 `self.triggerNpcEntity`와 동일할 경우, 해당 NPC 엔티티의 `NpcComponent:OnRequestOpenDialog(false)`를 호출하여 대화 창을 닫고, `self.triggerNpcEntity` 값을 `nil`로 초기화합니다. 질문: `HandleTriggerEnterEvent` 핸들러 내에서 특정 엔티티 [original] | --------------------------------- log('triggerLeave') -- Parameters local TriggerBodyEntity = event.TriggerBodyEntity --------------------------------------------------------- if self.triggerNpcEntity == TriggerBodyEntity then self.triggerNpcEntity [chunk_id] | Guides:1084:2
[task] | knowledge_list [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | 제시된 문서 원문에 명시된 정보만을 바탕으로 핵심 사실을 추출하여 목록으로 정리합니다. 1. `MyPlayerComponent`는 `DefaultPlayer` 엔티티에 추가하여 NPC와 플레이어의 상호작용 로직을 처리하도록 설계됩니다. 2. `triggerNpcEntity` 속성은 `[None]` 동기화 속성으로, 현재 트리거 범위 내에 있는 NPC 엔티티를 참조하는 `Entity` 타입 변수입니다. 3. `key` 속성은 `[Sync]` 동기화 속성으로, 값이 변경될 때 클라이언트로 동기화되며 `number` 타입입니다. 4. [original] | NPC와 플레이어가 상호작용할 수 있게 만들어봅시다. NPC의 trigger 범위에 플레이어가 있을 때 `E` 키를 누르면 UI가 열리고, `ESC` 키를 누르면 UI가 닫히도록 만듭니다. 1. 새로운 **MyPlayerComponent**를 생성하고, **DefaultPlayer**에 추가합니다. 2. **MyPlayerComponent**에 아래와 같이 작성합니다. ```lua Property: [None] Entity triggerNpcEntity = nil [Sync] numb [chunk_id] | Guides:1084:1
[task] | knowledge_list [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | 제시된 문서 내용을 바탕으로 추출한 핵심 사실 목록입니다. 1. `DialogEntity` 속성은 `[None]` 동기화 플래그를 가지며, 경로 `ui/DefaultGroup/DialogBackground`를 가리키는 `Entity` 타입입니다. 2. `QuantityInput` 속성은 `[None]` 동기화 플래그를 가지며, 경로 `ui/DefaultGroup/DialogBackground/Dialog/Count`를 가리키는 `TextInputComponent` 타입입니다. 3. `OnRequestOpenDialog` 메서 [original] | ```lua Property: [None] Entity DialogEntity = ui/DefaultGroup/DialogBackground [None] TextInputComponent QuantityInput = ui/DefaultGroup/DialogBackground/Dialog/Count Method: [client] void OnRequestOpenDialog (boolean isOpen) { self.DialogEntity.Enabl [chunk_id] | Guides:1084:3
[task] | distill [title] | 예시로 알아보는 서버 검증 [category] | Guides [rephrased] | ### 서버 검증 및 쿨타임 제어 예시 클라이언트 입력값을 서버에서 검증하고, 요청 간 쿨타임을 적용하는 패턴입니다. **핵심 동작** 1. **UI 상태 제어**: `[client]` 메서드로 대화상자(Entity)의 가시성(`Enable`)을 토글합니다. 2. **클라이언트 사전 필터링**: 버튼 클릭 이벤트에서 `DateTime.UtcNow.Elapsed`를 비교하여 1초 이내의 중복 요청을 차단합니다. 3. **서버 검증 위임**: 유효한 요청일 경우, `MyPlayerComponent`의 커스텀 메서드(`Verif [original] | ```lua Property: [None] Entity DialogEntity = ui/DefaultGroup/DialogBackground [None] TextInputComponent QuantityInput = ui/DefaultGroup/DialogBackground/Dialog/Count Method: [client] void OnRequestOpenDialog (boolean isOpen) { self.DialogEntity.Enabl [chunk_id] | Guides:1084:3