← 목록

mLua · Nemotron-CC 리프레이즈 (CPT)

총 8,200개 · 페이지 143/274
🔀 랜덤
불러오는 중…

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 질문: 문서에서 **UIManager** 컴포넌트에 추가해야 하는 프로퍼티의 총 개수는 몇 개인가요? 답변: **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가해야 합니다. 질문: **UIManager**에 추가되는 4개의 프로퍼티가 가지는 정보의 타입은 무엇인가요? 답변: 이 프로퍼티들은 **TextComponent** 정보를 가집니다. 질문: **UIManager** 컴포넌트에 추가하는 프로퍼티들의 이름은 무엇인가요? 답변: 프로퍼티의 이름은 `SkillLevelText`, `DnaLevelText`, `Ski [original] | 상점에 알맞는 정보가 표시될 수 있도록 만들어봅시다. 1. **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가합니다. 이 프로퍼티들은 **TextComponent** 정보를 가집니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Componen [chunk_id] | Guides:143:4

[task] | distill [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | # MSW 기본 이벤트 함수 **기본 이벤트 함수**는 특정 조건 충족 시 자동으로 호출되는 함수입니다. 기본적으로 서버에서 실행되며, 필요에 따라 호출 공간([server only], [client only] 등)을 설정할 수 있습니다. ## OnInitialize `OnBeginPlay` 호출 전, 엔티티/컴포넌트 생성 후 1회 호출됩니다. **주의**: 다른 컴포넌트나 엔티티 참조 시 **nil** 반환 가능성이 있으므로 권장하지 않습니다. ```lua void OnInitialize() { local myEnti [original] | # 학습 과정 소개 메이플스토리 월드에서 스크립트를 활용하면 크리에이터만의 독창적인 월드를 자유자재로 만들 수 있습니다. 스크립트를 작성할 때는 필요에 따라 기본 이벤트 함수를 활용하게 됩니다. **기본 이벤트 함수**란 다른 함수에서 직접 호출하지 않아도 **특정 조건이 되면 자동으로 호출되는 함수**를 말합니다. 이번 과정에서는 기본 이벤트 함수의 종류와 호출 시점을 알아봅시다. # 기본 이벤트 함수 추가하기 기본 이벤트 함수를 추가해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Crea [chunk_id] | Guides:163:0

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | ## 버튼 이벤트 처리 및 UI 상태 변경 ### 개념 설명 메이플스토리 월드의 스크립트에서 특정 UI 버튼이 눌렸을 때 발생하는 이벤트를 처리하는 로직은 일반적으로 `buttonName` 변수를 기준으로 분기 처리됩니다. 이 패턴은 상점 UI의 열림/닫힘, 판매 위치 이동, 스탯(Stats) 및 DNA 등급 상승 등 다양한 기능과 UI 가시성(`SetVisible`) 변경을 결합하여 처리합니다. ### API 사용법 원문에 등장하는 주요 메서드와 컴포넌트 접근 방식은 다음과 같습니다. * `self:SetShopInfo( [original] | if buttonName == "ShopButton" then self:SetShopInfo() -- 추가 self.ShopGroup:SetVisible(true, false) elseif buttonName == "SellButton" then self.Controller:MoveSellPosition() self:SetShopInfo() -- 추가 elseif buttonName == "ShopCloseButton" then self.ShopGroup:SetVisible(false, false) [chunk_id] | Guides:143:6

[task] | knowledge_list [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | 제공된 문서에 기반하여 핵심 사실을 정리한 목록은 다음과 같습니다. 1. 기본 이벤트 함수는 다른 함수에서 직접 호출하지 않아도 특정 조건이 충족되면 자동으로 호출되는 함수를 의미합니다. 2. 스크립트 컴포넌트 생성 시 Function 옆의 [+] 버튼을 통해 기본 제공되는 이벤트 함수를 추가할 수 있으며, New 항목은 사용자 지정 함수를 생성하는 용도로 사용됩니다. 3. 메이플스토리 월드에서 제공하는 기본 이벤트 함수는 기본적으로 서버(Server)에서 호출되며, 크리에이터의 의도에 따라 호출 공간(Execution Space [original] | # 학습 과정 소개 메이플스토리 월드에서 스크립트를 활용하면 크리에이터만의 독창적인 월드를 자유자재로 만들 수 있습니다. 스크립트를 작성할 때는 필요에 따라 기본 이벤트 함수를 활용하게 됩니다. **기본 이벤트 함수**란 다른 함수에서 직접 호출하지 않아도 **특정 조건이 되면 자동으로 호출되는 함수**를 말합니다. 이번 과정에서는 기본 이벤트 함수의 종류와 호출 시점을 알아봅시다. # 기본 이벤트 함수 추가하기 기본 이벤트 함수를 추가해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Crea [chunk_id] | Guides:163:0

[task] | wikipedia [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # Maple GYM 만들기 Ⅱ: 운동 기술과 DNA 업그레이드 시스템 구현 메이플스토리 월드의 'Maple GYM' 응용 제작 가이드에서 운동 기술과 DNA를 돈으로 업그레이드하는 시스템의 데이터 구조를 설정하는 과정을 다룹니다. 이 섹션에서는 각 등급별로 증가하는 힘(WeightBonus, MaxPow)과 누적 가능한 힘, 그리고 업그레이드에 필요한 금액(Cost) 정보를 관리하기 위한 데이터셋 구성 방법을 설명합니다. 관리해야 할 데이터가 증가할 경우, 스크립트 본문에 값을 직접 하드코딩하는 방식보다는 수학적 공식을 적용하 [original] | 운동 기술과 DNA는 돈을 사용해 업그레이드 할 수 있습니다. 그러므로 각각의 등급에서 증가하는 힘과 누적 가능한 힘, 필요한 금액 정보를 구성해 봅시다. > **Tip.** > 관리할 데이터가 많아질 경우 스크립트에 직접 입력하는 대신 공식을 사용하거나, 데이터셋을 사용해 효율적으로 관리할 수 있습니다. 1. **PlayerStats** 컴포넌트에 새로운 프로퍼티 2개를 추가합니다. ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테 [chunk_id] | Guides:143:3

[task] | diverse_qa [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | 질문: 기본 이벤트 함수의 정의는 무엇인가요? 답변: 기본 이벤트 함수는 다른 함수에서 직접 호출하지 않아도 특정 조건이 되면 자동으로 호출되는 함수를 말합니다. 질문: 메이플스토리 월드에서 제공하는 이벤트 함수는 기본적으로 어디서 호출되나요? 답변: 기본적으로 서버에서 호출합니다. 질문: `OnInitialize` 함수는 언제 1회 호출되나요? 답변: `OnBeginPlay` 함수가 호출되기 전, 엔티티와 컴포넌트가 생성된 후에 1회 호출됩니다. 질문: `OnInitialize` 함수 내부에서 다른 컴포넌트 또는 엔티티를 참 [original] | # 학습 과정 소개 메이플스토리 월드에서 스크립트를 활용하면 크리에이터만의 독창적인 월드를 자유자재로 만들 수 있습니다. 스크립트를 작성할 때는 필요에 따라 기본 이벤트 함수를 활용하게 됩니다. **기본 이벤트 함수**란 다른 함수에서 직접 호출하지 않아도 **특정 조건이 되면 자동으로 호출되는 함수**를 말합니다. 이번 과정에서는 기본 이벤트 함수의 종류와 호출 시점을 알아봅시다. # 기본 이벤트 함수 추가하기 기본 이벤트 함수를 추가해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Crea [chunk_id] | Guides:163:0

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 질문: `SetShopInfo()` 메서드에서 `skillGrade` 변수는 어떤 값으로 초기화되나요? 답변: `self.Stats.CurrentSkillGrade` 값에 `math.floor` 함수를 적용하여 소수점 이하를 버린 정수 값으로 초기화됩니다. 질문: `dnaGrade` 변수의 값은 어떤 방식으로 결정되나요? 답변: `self.Stats.CurrentDnaGrade` 값에 `math.floor` 함수를 적용하여 결정됩니다. 질문: 기술 레벨 텍스트(`SkillLevelText`)에 표시되는 문자열 형식은 무엇인가요? [original] | ```lua void SetShopInfo() { local skillGrade = math.floor(self.Stats.CurrentSkillGrade) local dnaGrade = math.floor(self.Stats.CurrentDnaGrade) self.SkillLevelText.Text = ("기술 레벨: "..skillGrade.."레벨") self.DnaLevelText.Text = ("DNA: "..self.Stats.DnaG [chunk_id] | Guides:143:5

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 제시된 원문에는 `SetShopInfo()` 메서드의 구현 내용과 `OnClickButton()` 메서드의 시그니처 일부만 포함되어 있으며, 문서 전체의 모든 정보가 아닙니다. 원문에 명시된 사실에 기반하여 추출한 핵심 사실 목록은 다음과 같습니다. 1. `SetShopInfo()` 메서드는 `self.Stats.CurrentSkillGrade`와 `self.Stats.CurrentDnaGrade` 값을 `math.floor` 함수를 사용하여 정수형 변수(`skillGrade`, `dnaGrade`)로 변환하여 사용한다. 2. ` [original] | ```lua void SetShopInfo() { local skillGrade = math.floor(self.Stats.CurrentSkillGrade) local dnaGrade = math.floor(self.Stats.CurrentDnaGrade) self.SkillLevelText.Text = ("기술 레벨: "..skillGrade.."레벨") self.DnaLevelText.Text = ("DNA: "..self.Stats.DnaG [chunk_id] | Guides:143:5

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # 운동 기술과 DNA 등급 데이터 관리 ## 1. 개념 설명 메이플스토리 월드의 Maple GYM 제작 환경에서, 운동 기술(Skill)과 DNA는 인게임 화폐(돈)를 소모하여 업그레이드되는 시스템입니다. 각 등급에 따라 플레이어에게 부여되는 효과(운동 스킬의 경우 힘 보너스, DNA의 경우 최대 힘)와 업그레이드에 필요한 비용이 단계별로 증가합니다. 이러한 등급별 데이터(비용, 효과 수치, 등급 이름)를 스크립트 런타임에 접근하기 쉽게 관리하기 위해, `PlayerStats` 컴포넌트 내에 테이블 형태의 프로퍼티를 정의하고 [original] | 운동 기술과 DNA는 돈을 사용해 업그레이드 할 수 있습니다. 그러므로 각각의 등급에서 증가하는 힘과 누적 가능한 힘, 필요한 금액 정보를 구성해 봅시다. > **Tip.** > 관리할 데이터가 많아질 경우 스크립트에 직접 입력하는 대신 공식을 사용하거나, 데이터셋을 사용해 효율적으로 관리할 수 있습니다. 1. **PlayerStats** 컴포넌트에 새로운 프로퍼티 2개를 추가합니다. ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테 [chunk_id] | Guides:143:3

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # 상점 UI 정보 동적 업데이트 상점 화면에 표시될 스킬 레벨, DNA 레벨, 그리고 구매 가능 여부에 따른 버튼 텍스트 및 색상 상태를 관리하기 위한 로직입니다. ## 1. 개념 설명 `UIManager` 컴포넌트는 상점 UI의 상태를 제어하는 중심 컴포넌트입니다. 상점 그룹(`ShopGroup`)의 표시 여부와 각 텍스트 컴포넌트(`TextComponent`)의 내용을 동적으로 변경하기 위해, 해당 UI 엔티티에 접근하는 참조를 프로퍼티로 선언하고 초기화합니다. ## 2. API 사용법 ### 2.1 프로퍼티 선언 상점 [original] | 상점에 알맞는 정보가 표시될 수 있도록 만들어봅시다. 1. **UIManager** 컴포넌트에 새로운 프로퍼티를 4개를 추가합니다. 이 프로퍼티들은 **TextComponent** 정보를 가집니다. ```lua Property: [None] Component SkillLevelText = nil [None] Component DnaLevelText = nil [None] Component SkillUpButtonText = nil [None] Componen [chunk_id] | Guides:143:4

[task] | wikipedia [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | # 스크립트 이해: MSW 기본 이벤트 함수 메이플스토리 월드(MapleStory Worlds)에서 크리에이터는 스크립트를 활용하여 독창적인 월드를 자유롭게 설계할 수 있습니다. 스크립트 작성 시에는 특정 조건이 충족되면 자동으로 실행되는 **기본 이벤트 함수**를 주로 활용합니다. 기본 이벤트 함수는 다른 함수에서 명시적으로 호출하지 않아도 시스템이 내부적으로 트리거하여 동작합니다. 본 가이드에서는 이러한 기본 이벤트 함수의 종류와 호출 시점에 대해 설명합니다. ## 기본 이벤트 함수 추가하기 기본 이벤트 함수를 스크립트 컴 [original] | # 학습 과정 소개 메이플스토리 월드에서 스크립트를 활용하면 크리에이터만의 독창적인 월드를 자유자재로 만들 수 있습니다. 스크립트를 작성할 때는 필요에 따라 기본 이벤트 함수를 활용하게 됩니다. **기본 이벤트 함수**란 다른 함수에서 직접 호출하지 않아도 **특정 조건이 되면 자동으로 호출되는 함수**를 말합니다. 이번 과정에서는 기본 이벤트 함수의 종류와 호출 시점을 알아봅시다. # 기본 이벤트 함수 추가하기 기본 이벤트 함수를 추가해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Crea [chunk_id] | Guides:163:0

[task] | extract_knowledge [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # 상점 UI 제어 및 버튼 이벤트 연결 ## 1. 개념 설명 메이플스토리 월드에서 상점 UI를 구성하고 사용자 입력에 따라 UI의 표시/숨김을 제어하거나 특정 스탯 업그레이드 로직을 실행하기 위해서는 UI 엔티티의 계층 구조(Hierarchy)를 명확히 정의하고, `UIManager` 컴포넌트를 통해 이벤트 핸들러를 연결해야 합니다. ## 2. API 사용법 상점 UI를 제어하는 데에는 다음과 같은 API와 컴포넌트 프로퍼티가 사용됩니다. * **`_EntityService:GetEntityByPath(path)`**: [original] | # 상점 UI 제작 1. 새로운 **UI Group**을 추가하고, **DefaultShow** 값을 **true**로 설정합니다. 2. 아래와 같이 UI엔티티를 추가하고 배치합니다. UI엔티티의 이름은 이미지와 동일해야 합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769512144899182516b8ee4d4248a16af41cc5d72f56.png "1") > **Tip.** > 이미지나 텍스트가 다른 UI엔티티에 가릴 경우 하이어라키 순서를 변경합니다. [chunk_id] | Guides:143:2

[task] | distill [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # 구매 처리 및 최대 힘 갱신 `DnaUpButton` 클릭 시 운동 기술 및 DNA 업그레이드를 처리합니다. `UIManager`의 `OnClickButton()`에서 `SkillUpButton`과 `DnaUpButton` 이벤트를 처리하도록 연결합니다. ## 1. PlayerStats 컴포넌트 메소드 추가 ### SkillUpgrade 운동 레벨이 증가하면 해당 레벨에 맞는 운동량(`WeightBonus`)을 설정합니다. - **실행 공간**: `[server]` - **동작**: `CurrentSkillGrade`가 ` [original] | # 구매 처리 실제 돈이 있는 상태에서 **DnaUpButton**을 클릭했을 때, 운동 기술과 DNA를 업그레이드 할 수 있도록 처리해봅시다. **UIManager**에서 `OnClickButton()`에서**SkillUpButton**와 **DnaUpButton**을 눌렀을 때 동작할 내용을 추가합니다. 1. **PlayerStats** 컴포넌트에서 새로운 `SkillUpgrade()` 메소드를 추가하고, 아래 내용을 입력합니다. 운동 레벨이 증가하면 해당 운동 레벨에 맞는 운동량을 설정하게 됩니다. ```lua [chunk_id] | Guides:143:7

[task] | knowledge_list [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 제시된 문서의 내용을 바탕으로 핵심 사실을 추출하여 목록으로 정리합니다. 1. `PlayerStats` 컴포넌트의 `SkillUpgrade()` 메서드는 `[server]` 실행 공간에서 동작하며, 매개변수가 없고 반환 타입은 `void`입니다. 2. `SkillUpgrade()` 메서드는 `self.CurrentSkillGrade`가 `self.SkillGradeTable`의 배열 길이(`#self.SkillGradeTable`)보다 크거나 같으면 즉시 반환하여 더 이상의 처리를 중단합니다. 3. `SkillUpgrade()` [original] | # 구매 처리 실제 돈이 있는 상태에서 **DnaUpButton**을 클릭했을 때, 운동 기술과 DNA를 업그레이드 할 수 있도록 처리해봅시다. **UIManager**에서 `OnClickButton()`에서**SkillUpButton**와 **DnaUpButton**을 눌렀을 때 동작할 내용을 추가합니다. 1. **PlayerStats** 컴포넌트에서 새로운 `SkillUpgrade()` 메소드를 추가하고, 아래 내용을 입력합니다. 운동 레벨이 증가하면 해당 운동 레벨에 맞는 운동량을 설정하게 됩니다. ```lua [chunk_id] | Guides:143:7

[task] | diverse_qa [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | 질문: `SkillUpgrade()` 메서드가 수행되는 실행 공간은 무엇인가요? 답변: `SkillUpgrade()` 메서드는 `[server]` 실행 공간에서 수행됩니다. 질문: `SkillUpgrade()` 메서드 내에서 운동 등급이 이미 최대인 경우의 동작은 무엇인가요? 답변: `self.CurrentSkillGrade`가 `self.SkillGradeTable`의 길이보다 크거나 같으면 함수가 즉시 반환(return)되어 더 이상의 처리가 수행되지 않습니다. 질문: `SkillUpgrade()` 메서드에서 운동 레벨이 증 [original] | # 구매 처리 실제 돈이 있는 상태에서 **DnaUpButton**을 클릭했을 때, 운동 기술과 DNA를 업그레이드 할 수 있도록 처리해봅시다. **UIManager**에서 `OnClickButton()`에서**SkillUpButton**와 **DnaUpButton**을 눌렀을 때 동작할 내용을 추가합니다. 1. **PlayerStats** 컴포넌트에서 새로운 `SkillUpgrade()` 메소드를 추가하고, 아래 내용을 입력합니다. 운동 레벨이 증가하면 해당 운동 레벨에 맞는 운동량을 설정하게 됩니다. ```lua [chunk_id] | Guides:143:7

[task] | distill [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | # OnBeginPlay `OnInitialize` 호출 이후, `OnUpdate` 호출 직전에 1회 실행됩니다. 모든 엔티티 및 컴포넌트 생성 완료 후 호출되어 다른 엔티티·컴포넌트 참조가 보장됩니다. ```lua void OnBeginPlay() { local myEntity = self.Entity log(myEntity.Name.."Hello MapleStory Worlds") local otherEntity = _EntityService:GetEntityByPath("엔티티 경로") [original] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo [chunk_id] | Guides:163:1

[task] | knowledge_list [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | 1. `OnBeginPlay` 함수는 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 이벤트 함수입니다. 2. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출되며, 동적으로 생성된 엔티티의 경우 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 3. `OnBeginPlay` 함수에서는 다른 엔티티 및 컴포넌트의 참조가 보장되므로, `self.Entity`를 통해 자기 자신이 적용된 엔티티를 [original] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo [chunk_id] | Guides:163:1

[task] | wikipedia [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | # 구매 처리 및 최대 힘 증가 처리 이 섹션에서는 Maple GYM 프로젝트에서 실제 화폐(돈)를 사용하여 운동 기술(Skill)과 DNA 등급을 업그레이드하는 로직을 구현하고, 이를 통해 최대 힘(MaxPow)을 갱신하는 과정을 설명합니다. ## 구매 처리 로직 구현 **UIManager** 컴포넌트의 `OnClickButton()` 함수 내에서 **SkillUpButton**과 **DnaUpButton** 클릭 이벤트를 감지하여, **PlayerStats** 컴포넌트의 업그레이드 메소드를 호출하도록 구성합니다. ### [original] | # 구매 처리 실제 돈이 있는 상태에서 **DnaUpButton**을 클릭했을 때, 운동 기술과 DNA를 업그레이드 할 수 있도록 처리해봅시다. **UIManager**에서 `OnClickButton()`에서**SkillUpButton**와 **DnaUpButton**을 눌렀을 때 동작할 내용을 추가합니다. 1. **PlayerStats** 컴포넌트에서 새로운 `SkillUpgrade()` 메소드를 추가하고, 아래 내용을 입력합니다. 운동 레벨이 증가하면 해당 운동 레벨에 맞는 운동량을 설정하게 됩니다. ```lua [chunk_id] | Guides:143:7

[task] | extract_knowledge [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | # 기본 이벤트 함수 (Basic Event Functions) ## 1. 개념 설명 기본 이벤트 함수는 크리에이터가 직접 호출하지 않아도, 월드 엔진에서 특정 조건(생명주기 단계, 사용자 상호작용 등)이 충족되면 자동으로 실행되는 함수입니다. 메이플스토리 월드(MSW)의 스크립트 컴포넌트는 `Property`, `Method`, `Event Handler` 블록으로 구성되며, 기본 이벤트 함수는 주로 `Event Handler` 블록 또는 컴포넌트의 생명주기 메서드로 제공됩니다. 기본적으로 MSW의 기본 이벤트 함수는 **서 [original] | # 학습 과정 소개 메이플스토리 월드에서 스크립트를 활용하면 크리에이터만의 독창적인 월드를 자유자재로 만들 수 있습니다. 스크립트를 작성할 때는 필요에 따라 기본 이벤트 함수를 활용하게 됩니다. **기본 이벤트 함수**란 다른 함수에서 직접 호출하지 않아도 **특정 조건이 되면 자동으로 호출되는 함수**를 말합니다. 이번 과정에서는 기본 이벤트 함수의 종류와 호출 시점을 알아봅시다. # 기본 이벤트 함수 추가하기 기본 이벤트 함수를 추가해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Crea [chunk_id] | Guides:163:0

[task] | wikipedia [title] | Maple GYM 만들기 Ⅱ [category] | Guides [rephrased] | ### [Guides] 응용 제작 가이드 Maple GYM 만들기 Ⅱ 본 섹션에서는 `UIManager` 스크립트 컴포넌트의 `SetShopInfo()` 메서드와 `OnClickButton()` 이벤트 핸들러의 구현 방식을 다룹니다. #### 1. 상점 정보 갱신 메서드: `SetShopInfo()` `SetShopInfo()` 메서드는 플레이어의 현재 상태(`Stats`)를 기반으로 상점 UI의 텍스트 내용과 버튼 색상 정보를 갱신하는 역할을 합니다. 이 메서드는 기술 등급(`CurrentSkillGrade`)과 DNA 등급 [original] | ```lua void SetShopInfo() { local skillGrade = math.floor(self.Stats.CurrentSkillGrade) local dnaGrade = math.floor(self.Stats.CurrentDnaGrade) self.SkillLevelText.Text = ("기술 레벨: "..skillGrade.."레벨") self.DnaLevelText.Text = ("DNA: "..self.Stats.DnaG [chunk_id] | Guides:143:5

[task] | distill [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | ### MSW 기본 이벤트 함수 `OnBeginPlay`와 `OnMapEnter`는 호출 시점이 다르므로 용도에 맞게 사용해야 합니다. 1. **`OnBeginPlay`**: 서버상에서 엔티티가 **최초 생성될 때만 1회** 호출됩니다. 클라이언트에서는 현재 맵에 다른 플레이어가 생성된 것처럼 보이지만, 서버에서는 이미 존재하던 엔티티이므로 재호출되지 않습니다. 2. **`OnMapEnter`**: 엔티티가 **맵을 이동할 때마다** 호출됩니다. 서버와 클라이언트 모두에서 동일하게 작동합니다. * *예시*: 플레이 [original] | 예를 들어, 내 플레이어 엔티티가 **map01에서 map02로 이동**했다고 가정합니다. 이때 내 플레이어 엔티티의 스크립트 컴포넌트에 `OnMapEnter` 함수가 있었다면, map02로 이동할 때 내 플레이어 엔티티의 `OnMapEnter` 함수가 호출됩니다. 그런데 내 플레이어뿐만 아니라 다른 플레이어의 `OnMapEnter` 함수도 호출되는 것을 볼 수 있습니다. 클라이언트 상에서 보자면, 현재 내가 존재하는 맵에 다른 플레이어 엔티티가 생성된 것과 마찬가지이기 때문입니다. 하지만 서버상에서는 내 플레이어 엔티티가 map [chunk_id] | Guides:163:3

[task] | distill [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | # MSW 기본 이벤트 함수 엔티티 생명주기와 맵 진입 시점을 제어하는 핵심 이벤트 핸들러입니다. ### OnUpdate `OnBeginPlay` 호출 후 프레임마다 실행됩니다. 위치·상태·동작 변경 시 사용하며, 이전 프레임 경과 시간(**delta**, 초)을 매개변수로 받습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time = 0 end self._T.Time = self._T.Time + delta [original] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time [chunk_id] | Guides:163:2

[task] | knowledge_list [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | * `OnSyncProperty` 함수는 서버에서 변경된 `[Sync]` 프로퍼티 값이 클라이언트로 동기화 완료된 시점에 클라이언트에서 호출되는 이벤트 핸들러입니다. * `OnSyncProperty` 함수의 매개변수는 `string` 타입의 `name`과 `any` 타입의 `value`이며, 각각 동기화된 프로퍼티의 이름과 변경된 프로퍼티 값을 전달받습니다. * `OnSyncProperty` 함수는 반드시 `[Client Only]` 실행 공간 속성을 가져야 하며, 반환 타입은 `void`입니다. * 프로퍼티의 동기화 설정이 `[N [original] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name, [chunk_id] | Guides:163:4

[task] | knowledge_list [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | 제시된 문서 내용만 기반으로 추출한 핵심 사실 목록입니다. 1. 플레이어 엔티티가 `map01`에서 `map02`로 이동할 때, 해당 플레이어 엔티티의 스크립트 컴포넌트에 `OnMapEnter` 함수가 정의되어 있다면 `map2` 진입 시점에 `OnMapEnter` 함수가 호출됩니다. 2. 클라이언트 관점에서 다른 플레이어 엔티티의 `OnMapEnter` 함수가 호출되는 이유는, 현재 내가 존재하는 맵에 다른 플레이어 엔티티가 새롭게 생성된 것과 동일한 상황으로 인식되기 때문입니다. 3. 서버 관점에서 내 플레이어 엔티티가 맵을 [original] | 예를 들어, 내 플레이어 엔티티가 **map01에서 map02로 이동**했다고 가정합니다. 이때 내 플레이어 엔티티의 스크립트 컴포넌트에 `OnMapEnter` 함수가 있었다면, map02로 이동할 때 내 플레이어 엔티티의 `OnMapEnter` 함수가 호출됩니다. 그런데 내 플레이어뿐만 아니라 다른 플레이어의 `OnMapEnter` 함수도 호출되는 것을 볼 수 있습니다. 클라이언트 상에서 보자면, 현재 내가 존재하는 맵에 다른 플레이어 엔티티가 생성된 것과 마찬가지이기 때문입니다. 하지만 서버상에서는 내 플레이어 엔티티가 map [chunk_id] | Guides:163:3

[task] | wikipedia [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | # OnBeginPlay `OnBeginPlay` 함수는 스크립트 로직이 본격적으로 시작되는 시점, 즉 `OnInitialize` 함수 호출 이후와 `OnUpdate` 함수 호출 직전에 1회 호출되는 이벤트 함수입니다. 이 함수는 엔티티와 해당 엔티티에 포함된 모든 컴포넌트가 생성된 이후에 호출됩니다. 동적으로 생성된 엔티티의 경우에도 해당 엔티티의 모든 컴포넌트가 생성된 후에 `OnBeginPlay`가 실행됩니다. 이러한 특성으로 인해 `OnInitialize` 함수와 달리 `OnBeginPlay` 함수 내부에서는 다른 엔티티 [original] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo [chunk_id] | Guides:163:1

[task] | wikipedia [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | **스크립트 이해: MSW 기본 이벤트 함수** `OnSyncProperty` 함수는 서버에서 프로퍼티의 값이 변경되어 클라이언트로 동기화될 때 클라이언트 측에서 호출되는 이벤트 핸들러입니다. 이 함수가 실행되면 동기화 대상이 된 프로퍼티의 이름(`name`)과 변경된 값(`value`)이 매개변수로 전달됩니다. 프로퍼티의 동기화 범위가 `[None]`으로 설정된 경우, 해당 프로퍼티는 네트워크를 통해 동기화되지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. 따라서 이 이벤트를 통해 값을 확인하거나 처리하려면 [original] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name, [chunk_id] | Guides:163:4

[task] | distill [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | # OnSyncProperty (클라이언트 동기화 이벤트) 서버에서 변경된 `[Sync]` 프로퍼티 값이 클라이언트에 반영된 후 호출되는 함수입니다. ## 시그니처 ```lua [Client Only] void OnSyncProperty(string name, any value) ``` - **name**: 동기화된 프로퍼티 이름 - **value**: 변경된 프로퍼티 값 ## 동작 규칙 및 주의사항 - **호출 시점**: 동기화 완료 시점에 호출되며, 이때 `self`를 통해 접근한 프로퍼티 값은 이미 동기화 완료된 값과 동 [original] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name, [chunk_id] | Guides:163:4

[task] | wikipedia [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | 스크립트 컴포넌트 내의 `OnMapEnter` 함수는 엔티티가 맵에 진입할 때 호출되는 이벤트 처리 함수입니다. 이 함수의 동작은 클라이언트와 서버 환경에서 미세한 차이가 있으며, 이를 정확히 이해하는 것이 중요합니다. 예를 들어, 플레이어가 `map01`에서 `map02`로 이동하는 상황을 가정해 보겠습니다. 클라이언트 관점에서 볼 때, `map02`로 이동한 순간 해당 맵에 존재하는 다른 플레이어 엔티티들이 새로 생성된 것처럼 보이며, 이로 인해 내 플레이어 엔티티뿐만 아니라 다른 플레이어 엔티티들의 `OnMapEnter` 함 [original] | 예를 들어, 내 플레이어 엔티티가 **map01에서 map02로 이동**했다고 가정합니다. 이때 내 플레이어 엔티티의 스크립트 컴포넌트에 `OnMapEnter` 함수가 있었다면, map02로 이동할 때 내 플레이어 엔티티의 `OnMapEnter` 함수가 호출됩니다. 그런데 내 플레이어뿐만 아니라 다른 플레이어의 `OnMapEnter` 함수도 호출되는 것을 볼 수 있습니다. 클라이언트 상에서 보자면, 현재 내가 존재하는 맵에 다른 플레이어 엔티티가 생성된 것과 마찬가지이기 때문입니다. 하지만 서버상에서는 내 플레이어 엔티티가 map [chunk_id] | Guides:163:3

[task] | diverse_qa [title] | MSW 기본 이벤트 함수 [category] | Guides [rephrased] | 질문: `OnBeginPlay` 함수는 언제 호출되나요? 답변: `OnBeginPlay` 함수는 `OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전에 1회 호출되는 함수입니다. 질문: `OnBeginPlay` 함수가 호출될 때 다른 엔티티와 컴포넌트의 생성 상태는 어떻게 되나요? 답변: 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출되며, 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 호출됩니다. 질문: `OnInitialize` 함수와 `On [original] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo [chunk_id] | Guides:163:1

[task] | distill [title] | 엔티티와 컴포넌트 참조 [category] | Guides [rephrased] | # 엔티티와 컴포넌트 참조 엔티티는 컴포넌트로 구성되며, 상-하위 계층 구조를 형성합니다. 이 구조를 통해 스크립트에서 다른 엔티티에 접근할 수 있습니다. ## 참조 방법 ### `self.Entity` 현재 스크립트 컴포넌트가 속한 엔티티를 참조합니다. ```lua void OnBeginPlay() { local myEntity = self.Entity log(myEntity.Name) } ``` ### `Entity.Parent` 상위(부모) 엔티티를 참조합니다. ```lua void OnBeginPla [original] | # 학습 과정 소개 엔티티와 컴포넌트 구조를 간략하게 이해하고, 스크립트를 통해 엔티티와 컴포넌트에 접근하는 방법을 알아봅니다. # 엔티티와 컴포넌트 구조 먼저 엔티티와 컴포넌트의 구조를 알아보겠습니다. 기본적으로 엔티티는 각기 다른 컴포넌트들로 구성되어 있고, 각각의 엔티티는 상위, 하위 관계로 연결되어 있습니다. 이 연결 구조를 이용하면 특정 컴포넌트에서 다른 엔티티나 컴포넌트로 접근할 수 있습니다. 아래 이미지는 엔티티 간의 상-하위 구조와 각 엔티티를 구성하는 컴포넌트를 도식화한 것입니다. 이후 이 구조를 바탕으로 설명 [chunk_id] | Guides:164:0

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