# World Event

## 월드 이벤트 관리 페이지 🚩

월드 관리 페이지에서 우측 상단의 **🔽드롭다운**을 눌러, 월드 이벤트 설정을 선택해요.

<figure><img src="/files/fNFUnoaDbMDqOcuDGRGG" alt=""><figcaption></figcaption></figure>

🚩월드 이벤트 설정 페이지에서 월드 이벤트를 등록하거나 편집할 수 있고, 등록한 월드 이벤트의 목록과 일정의 기록 내역을 확인할 수 있어요.

<figure><img src="/files/0d9zn2XU4UNJruVvtXjl" alt=""><figcaption></figcaption></figure>

등록된 데이터의 **초기값 영역**에 마우스를 호버🖱️하면 전체 내용을 확인할 수 있어요.

<figure><img src="/files/S04OWe5TT5ULlKkTMRKS" alt=""><figcaption></figcaption></figure>

## 월드 이벤트 데이터 🗃️

### 데이터 등록

월드 이벤트의 데이터는 월드 이벤트 설정 페이지에서 우측 상단의 **➕ 등록하기 버튼**을 눌러 등록할 수 있어요.

<figure><img src="/files/ArQC5OV4gnXAK5rwanps" alt=""><figcaption></figcaption></figure>

월드 이벤트는 공지사항 타입 또는 데이터 타입으로 등록할 수 있어요.

<table><thead><tr><th width="135">데이터 타입</th><th width="91">값 타입</th><th width="407">용도</th><th>초기값</th></tr></thead><tbody><tr><td>공지사항</td><td>string</td><td>공지사항, 점검 메시지 등 단순 문자열 출력</td><td>없음</td></tr><tr><td>데이터</td><td>number string bool</td><td>경험치 배율, 특정 이름의 NPC 찾기, 던전 개방 여부 등 게임 데이터</td><td>설정 필요</td></tr></tbody></table>

데이터 이름은 영어/숫자/언더바만 입력 가능하며,\
데이터 **값 타입**에 따라 입력할 수 있는 내용은 아래와 같아요.

* number : 실수, 정수, 양수, 음수 입력 가능 (숫자 기준 최대 20자)
* string : 한글/영어/숫자/언더바 입력 가능 (한글 기준 최대 20)
* bool : true / false 중 선택 가능

### 데이터 삭제

**데이터 이름 영역**을 클릭하면 출력되는 월드 이벤트 관리 팝업에서 **삭제 버튼**을 클릭해서 지울 수 있어요.

<figure><img src="/files/5ZrFEdMUsMhZs6KvCLXl" alt=""><figcaption></figcaption></figure>

### 데이터 수정

**데이터 이름 영역**을 클릭하면 출력되는 월드 이벤트 관리 팝업에서 원하는 값을 수정 후에 **수정 버튼**을 클릭해서 적용할 수 있어요.

<figure><img src="/files/WQe7ieKJY7IBBthdsvEl" alt=""><figcaption></figcaption></figure>

### 월드 이벤트 데이터의 일정 관리 📅

데이터의 **일정 설정 버튼**을 클릭하면 출력되는 **일정 설정 팝업**에서 일정을 추가하거나 삭제, 편집할 수 있어요.

<figure><img src="/files/7Oy43ncBzufpuejjYrxS" alt=""><figcaption></figcaption></figure>

등록된 일정의 **값 영역**에 마우스를 호버🖱️하면 전체 내용을 확인할 수 있어요.

<figure><img src="/files/GRzsM9fVBLB3T6gkRIJo" alt=""><figcaption></figcaption></figure>

### 일정 등록

일정 설정 팝업에서 우측 상단의 **➕ 일정등록 버튼**을 눌러 일정을 추가할 수 있어요.

<figure><img src="/files/3wKrVWhs0eF7QTd00uYj" alt=""><figcaption></figcaption></figure>

**\[데이터 타입의 일정]**

데이터 타입의 일정을 등록하면 설정한 시작일\~종료일 안에서 적용 요일의 시작시간이 됐을때 **설정한 값이 적용**되고, 해제시간이 되면 **초기값으로 복구**돼요.

<figure><img src="/files/J2N5YTpF60drWfVmg2qH" alt=""><figcaption></figcaption></figure>

예를 들어 ExpRate의 초기값을 1로 설정한 다음, \
2024\. 08. 01 \~ 2024. 08. 31 토/일요일 오후 02:00 \~ 오후 04:00으로 일정을 등록하면 \
오후 02:00가 됐을 때 ExpRate의 값은 2로 변경되고 오후 04:00가 되면 초기값인 1로 복구돼요.

💡 데이터 타입은 일정을 등록하거나 날짜/요일/시간을 편집할 때, 이미 등록된 일정과 **날짜나 요일, 시간이 겹치는게 있으면** 등록할 수 없어요.

<figure><img src="/files/yzrJ47dRCEp5T4OZQ4Pc" alt=""><figcaption></figcaption></figure>

데이터 값 타입에 따라 입력할 수 있는 내용은 아래와 같아요.

* number : 실수, 정수, 양수, 음수 입력 가능 (숫자 기준 최대 20자)
* string : 한글/영어/숫자/언더바 입력 가능 (한글 기준 최대 20)
* bool : true / false 중 선택 가능

**\[공지사항 타입의 일정]**

공지사항 타입의 일정은 **1회 발송할지, 반복 발송**할지 선택할 수 있어요.

<figure><img src="/files/fq91VuE4IGmBxdkdQFtU" alt=""><figcaption></figcaption></figure>

반복 설정이 **비활성화**인 경우 설정한 시작일의 시작시간이 됐을 때 **1회 발송**되며, \
반복 설정이 **활성화**인 경우 설정한 시작일\~종료일 안에서 적용 요일의 시작시간이 될 때 마다 발송돼요.

공지사항 타입은 **한글/영어/숫자/언더바만** 입력 가능해요. (한글 기준 최대 20)

### 일정 삭제

데이터에서 **삭제 버튼**을 클릭하면 출력되는 팝업에서 **삭제 버튼**을 클릭해서 지울 수 있어요.

<figure><img src="/files/o3jizGj9mcTyiOCsuSWs" alt=""><figcaption></figcaption></figure>

### 일정 수정

데이터에서 **편집 버튼**을 클릭하면 출력되는 일정 편집 팝업에서 원하는 값을 수정 후에 **수정 버튼**을 클릭해서 적용할 수 있어요.

<figure><img src="/files/Vk8Zu4OF9q356TOETT9s" alt=""><figcaption></figcaption></figure>

## 월드 이벤트 스크립트 처리 📝

월드 이벤트의 데이터와 일정 정보를 가져오기 위한 준비 함수를 요청해요.

```lua
--Server Script에서
Game:RequestWorldEventList() --이 함수를 호출해서 OnGetWorldEventListEvent를 받아야 
                             --월드 이벤트를 사용할 수 있어요.

--월드 이벤트 설정이 끝나거나 정보가 갱신될 때 호출되는 이벤트예요.
--(이 이벤트를 사용하려면 RequestWorldEventList를 호출해야 하며, 월드 이벤트에 대한 내부 설정이 모두 끝나면 이벤트가 호출돼요.)
--(월드 이벤트의 데이터를 추가하거나, 수정하면 다시 호출될 수 있어요.)
local function GetWorldEventListEvent()
   print("월드이벤트의 세팅이 완료돼었어요!!")
end
Game.OnGetWorldEventListEvent:Connect(GetWorldEventListEvent)
```

현재 시간이 월드 이벤트에 등록한 어떤 데이터의 일정이 되면 호출되는 이벤트에요.

```lua
--Server Script에서

--현재 시간이 월드 이벤트에 등록한 문자열 데이터의 일정이 되면 호출되는 이벤트에요.
local function OnWorldEventString(keyName, keyValue)	
    --keyName으로 어떤 월드 이벤트인지 구분할 수 있어요.
    print(keyName, " : ", keyValue) 
end
Game.OnGetWorldEventString:Connect(OnWorldEventString)


--현재 시간이 월드 이벤트에 등록한 숫자 데이터의 일정이 되면 호출되는 이벤트에요.
local function OnWorldEventNumber(keyName, keyValue)
    --keyName으로 어떤 월드 이벤트인지 구분할 수 있어요.
    print(keyName, " : ", keyValue) 
end
Game.OnGetWorldEventNumber:Connect(OnWorldEventNumber)


--현재 시간이 월드 이벤트에 등록한 불리언 데이터의 일정이 되면 호출되는 이벤트에요.
local function OnWorldEventBool(keyName, keyValue)
    --keyName으로 어떤 월드 이벤트인지 구분할 수 있어요.
    print(keyName, " : ", keyValue) 
end
Game.OnGetWorldEventBool:Connect(OnWorldEventBool)
```

**데이터 타입**은 일정이 되지 않았더라도 현재 값을 가져올 수 있어요.

```lua
--Server Script에서

-- 숫자 타입의 데이터 현재값 가져오기
local expRate = Game:RequestWorldEventNumber("ExpRate")

--월드 이벤트에 대한 내부 설정이 끝나지 않았으면 nil이 반환될 수 있어요.
if expRate == nil or expRate == "nil" then
    print("ExpRate가 설정되지 않았습니다. : ", expRate)
else
    print("ExpRate : ", expRate)
end


-- 문자열 타입의 데이터 현재값 가져오기
local findNPCName = Game:RequestWorldEventString("FindNPCName")

--월드 이벤트에 대한 내부 설정이 끝나지 않았으면 nil이 반환될 수 있어요.
if findNPCName == nil or findNPCName == "nil" then
    print("FindNPCName가 설정되지 않았습니다. : ", findNPCName)
else
    print("FindNPCName : ", findNPCName)
end


-- 불리언 타입의 데이터 현재값 가져오기
local isOpenRaidDungeon = Game:RequestWorldEventBool("IsOpenRaidDungeon")

--월드 이벤트에 대한 내부 설정이 끝나지 않았으면 nil이 반환될 수 있어요.
if isOpenRaidDungeon == nil or isOpenRaidDungeon == "nil" then
    print("IsOpenRaidDungeon가 설정되지 않았습니다. : ", isOpenRaidDungeon)
else
    print("IsOpenRaidDungeon : ", isOpenRaidDungeon)
end    
```

## 일정 기록 💾

일정 기록 항목에서 등록하거나 삭제한 일정의 내역을 확인할 수 있으며, 삭제한 일정은 **취소선**으로 표시돼요.

좌측 상단의 🔽**드롭다운**을 눌러 특정 데이터나 전체 데이터를 확인할 수 있어요.

<figure><img src="/files/rZ95ZfqisZqM0cta50LI" alt=""><figcaption></figcaption></figure>

필터를 **기간**으로 설정하면 일정의 시작일\~종료일 안에서 목록이 출력되고, **기록 시간**으로 설정하면 특정 시간에 기록된 일정 목록이 출력돼요.

<figure><img src="/files/uwXIohzhUm4Vlrdmtm4p" alt=""><figcaption></figcaption></figure>

기록의 **값 영역**에 마우스를 호버🖱️하면 전체 내용을 확인할 수 있어요.

<figure><img src="/files/Mf9bPvBI4FwpkNSIhj5f" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ditoland-utplus.gitbook.io/ditoland/manual/world-event.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
