← 목록

mLua · Nemotron SDG 질문-응답 (SFT)

총 21,567개 · 페이지 471/719
🔀 랜덤
불러오는 중…

[task] | instruction_following [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | DataStorageKeyInfo를 사용해 특정 버전의 값을 가져오는 과정을 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") -- DataStorageKeyInfo 객체를 생성하여 Key와 가져올 특정 Version을 지정합니다. local getterKeyInfo = DataStorageKeyInfo() getterKeyInfo.Key = "Key" getterKeyInfo.Version = "Version1" -- GetByInfoAndWait 함수를 사용해 DataStorageKeyInfo 객체 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 데이터를 가져올 때는 GetAndWait, GetAsync 함수를 사용합니다. GlobalDataStorage, UserDataStorage, CreatorDataStorage는 문자열 타입의 값만 가져올 수 있습니다. 만약 데이터를 저장할 때 `_UtilLogic:TableToString()` 함수를 사용해 데이터를 문자열로 변환했다면, 데이터를 가져올 때는 `_UtilLogic:StringToTable()` 함수를 사용해 기존 타입으로 변환하여 사용할 수 있습니다. SortableDataStorage는 정수 타입의 값만 가져올

[task] | single_turn [pass] | ⏳ 미판정 [title] | 날짜와 시간 활용하기 [question] | "yyy" 포맷은 연도가 네 자릿수여도 그대로 출력된다고 하는데, "yyyy" 포맷과의 구체적인 차이점이 무엇인가요? [answer] | "yyy"와 "yyyy" 포맷 지정자의 구체적인 차이점은 **연도가 3자릿수 미만일 때의 0 패딩(채움) 여부**입니다. 1. **"yyy" (최소 3자리)** * 연도가 3자리보다 적을 경우(예: 999, 99) 0을 채워 최소 3자리로 출력합니다. * 연도가 3자리보다 많을 경우(예: 2022)는 **그대로** 출력합니다. 4자릿수 연도인 2022를 "yyy"로 포맷하면 `2022`가 됩니다. * 즉, "최소" 3자리를 보장할 뿐, 4자리 이상의 연도는 확장하여 출력합니다. 2. **"yy [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | "tt" 사용자 지정 서식 지정자는 AM/PM 지정자를 나타냅니다. AM 지정자는 0:00:00부터 11:59:59.999까지의 모든 시간에 사용되고 PM 지정자는 12:00:00부터 23:59:59.999까지의 모든 시간에 사용됩니다. ```lua local date = DateTime(2022, 8, 29, 19, 7, 5, 023) log(date:ToFormattedString("tt")) -- PM ``` #### "y" "y" 사용자 지정 서식 지정자는 연도를 한자리 또는 두 자리 숫자로 나타냅니다. 연도가 두 자리를

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | DataStorageKeyInfo를 사용할 때 Tag와 Version을 생략하면 일반 SetAndWait 함수와 동작이 완전히 동일해지나요? [answer] | DataStorageKeyInfo를 Tag와 Version 없이 사용할 경우, SetAndWait와 SetAsync 계열 함수를 사용해 데이터를 저장한 것과 **동일한 동작**을 합니다. 즉, `DataStorageKeyInfo("key")`처럼 키만 지정하여 생성한 후 `SetByInfoAndWait` 등을 호출하면, 기존에 `SetAndWait("key", "value")`를 호출했을 때와 동일한 방식으로 데이터가 저장됩니다. ```lua [server only] void SaveDataExample() { local [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage에 키 값과 더불어 Tag, Version을 지정해서 저장할 수 있습니다. 새로운 두 값을 저장하기 위해선 DataStorageKeyInfo를 활용해야 합니다. `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개 변수로 key, Tag, Version을 사용할 수 있습니다. 만약 DataStorageKeyInfo를 Tag, Version 없이 사용한다면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일합니다. 또한 SetByInfoAndW

[task] | two_turn [pass] | ⏳ 미판정 [title] | 날짜와 시간 활용하기 [question] | DateTime의 사용자 지정 서식 지정자 중 "dd", "ddd", "dddd"는 각각 어떻게 다른 정보를 출력하며, 문화권 지정 시 어떤 차이가 발생합니까? [answer] | `DateTime`의 사용자 지정 서식 지정자 `"dd"`, `"ddd"`, `"dddd"`는 각각 다른 날짜 정보를 출력하며, 문화권 지정에 따라 결과가 달라집니다. 1. **"dd" (일)** * **출력 내용**: 일을 01부터 31까지의 숫자로 나타냅니다. * **특징**: 일이 한 자릿수인 경우 십의 자리에 0이 표시됩니다. * **문화권 영향**: 숫자 기반이므로 문화권을 지정해도 출력 형식이나 값에 변화가 없습니다. 2. **"ddd" (요일 약식 이름)** * **출력 [followup] | "ddd"와 "dddd" 지정자를 사용하면서 "fr-FR" 문화권을 지정했을 때의 구체적인 출력 결과와, 이를 스크립트에서 어떻게 호출하는지 코드 예제를 보여주세요. [followup_answer] | `"ddd"`와 `"dddd"` 지정자를 `"fr-FR"` 문화권과 함께 사용할 때의 출력 결과는 다음과 같습니다. 1. **"ddd" (요일 약식 이름, fr-FR)** * 문화권 미지정 시 영어 약식(`Mon`)이 출력되지만, `"fr-FR"`을 지정하면 프랑스어 약식 요일 **`lun.`**이 출력됩니다. 2. **"dddd" (요일 전체 이름, fr-FR)** * 문화권 미지정 시 영어 전체 이름(`Monday`)이 출력되지만, `"fr-FR"`을 지정하면 프랑스어 전체 요일 이름 **`lundi` [scores] | [judge_reason] | [source_doc] | "dd" 사용자 지정 서식 지정자는 일을 01부터 31까지의 숫자로 나타냅니다. 일이 한 자릿수인 경우 십의 자리에는 0이 표시됩니다. ```lua local date = DateTime(2022, 8, 9, 19, 27, 15) log(date:ToFormattedString("dd")) -- 09 ``` #### "ddd" "ddd" 사용자 지정 서식 지정자는 요일의 약식 이름을 나타냅니다. 문화권을 지정하면, 문화권에 해당하는 약식 요일이 나타납니다. ```lua local date = DateTime(2022, 8,

[task] | two_turn [pass] | ⏳ 미판정 [title] | 날짜와 시간 활용하기 [question] | DateTime 객체의 표준 서식 지정자("m", "y")와 문화권 지정 시 출력 결과가 어떻게 달라지는지 알고 싶습니다. [answer] | `DateTime` 객체의 표준 서식 지정자 `"m"`(월)와 `"y"`(년 월)는 문화권(Culture)을 지정하지 않으면 영어 기반의 기본 서식으로 출력됩니다. 문화권 코드를 두 번째 인자로 전달하면 해당 문화권에 맞는 날짜 형식으로 변환됩니다. **1. "m" (월) 표준 서식 지정자** * **기본 (문화권 미지정):** `"MMMM dd"` 형식 (예: `April 10`) * **문화권 지정 시:** 해당 문화권의 월 이름과 날짜 순서에 따라 출력됩니다. ```lua local date = DateTime(20 [followup] | `DateTime(2022, 4, 10)` 객체에 대해 `ToFormattedString("m")`과 `ToFormattedString("m", "pt-BR")`의 출력 차이를 확인하는 mLua 코드 예시를 작성해 주세요. [followup_answer] | ```lua local date = DateTime(2022, 4, 10) log(date:ToFormattedString("m")) -- April 10 log(date:ToFormattedString("m", "pt-BR")) -- 10 de abril ``` [scores] | [judge_reason] | [source_doc] | "M" 또는 "m" 표준 서식 지정자는 특정 문화권의 월 서식 문자열을 나타냅니다. 문화권을 지정하지 않을 경우 서식 문자열은 **"MMMM dd"**입니다. ```lua local date = DateTime(2022, 4, 10) log(date:ToFormattedString("m")) -- April 10 log(date:ToFormattedString("m", "pt-BR")) -- 10 de abril ``` #### "Y", "y" "Y" 또는 "y" 표준 서식 지정자는 특정 문화권의 년 월 서식 문자열을 나타냅

[task] | code [pass] | ⏳ 미판정 [title] | 날짜와 시간 활용하기 [question] | DateTime 객체의 ToFormattedString 메서드를 활용해 "%M/%d/%Y" 형식으로 날짜를 출력하되, 한 자릿수 월과 날짜 앞의 0을 제거하기 위해 "M"과 "d" 서식 지정자를 단독으로 사용할 때 "%"를 올바르게 적용하는 스크립트를 작성해줘 [answer] | `DateTime` 객체의 `ToFormattedString` 메서드에서 `"M"`(월)과 `"d"`(일) 서식 지정자를 단독으로 사용할 경우, 표준 서식 문자열로 오인되지 않도록 각 지정자 앞에 `%`를 붙여야 합니다. 질문에서 요청한 `"%M/%d/%Y"` 형식은 다음과 같이 작성할 수 있습니다. ```lua local date = DateTime(2022, 8, 5, 19, 7, 15, 023) local formattedDate = date:ToFormattedString("%M/%d/%Y") log(formattedDa [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | "mm" 사용자 지정 서식 지정자는 분을 00부터 59까지의 숫자로 나타냅니다. 분은 마지막 시간 이후 경과한 총 분 수를 나타냅니다. 분이 한 자릿수인 경우 십의 자리는 0으로 표시됩니다. ```lua local date = DateTime(2022, 8, 29, 19, 7, 15, 023) log(date:ToFormattedString("mm")) -- 07 ``` #### "M" "M" 사용자 지정 서식 지정자는 월을 1부터 12까지의 숫자로 나타냅니다. 월이 한 자릿수인 경우 십의 자리는 표시되지 않습니다. "M" 사용

[task] | two_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | GlobalDataStorage에 데이터를 저장할 때 Tag와 Version을 지정하는 방법과 DataStorageKeyInfo의 생성 방식이 궁금합니다. [answer] | GlobalDataStorage에 데이터를 저장할 때 Tag와 Version을 지정하려면 `DataStorageKeyInfo` 객체를 생성하여 `SetByInfoAndWait` 또는 `SetByInfoAsync` 함수에 전달해야 합니다. `DataStorageKeyInfo`는 두 가지 방식으로 생성할 수 있습니다. 첫째, 생성자 호출 시 매개변수로 Key, Tag, Version을 직접 지정하는 방식입니다. ```lua local keyInfo = DataStorageKeyInfo("key", "Tag", "Version1") ` [followup] | DataStorageKeyInfo를 빈 생성자로 생성한 후 Key와 Version만 개별적으로 설정하는 코드를 작성해 주시겠어요? [followup_answer] | DataStorageKeyInfo를 빈 생성자로 생성한 후 Key와 Version만 개별적으로 설정하는 코드는 다음과 같습니다. ```lua [server only] void SaveDataWithKeyAndVersion() { local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") -- 빈 생성자로 DataStorageKeyInfo 객체 생성 local keyInfo = DataStorageKeyInfo() [scores] | [judge_reason] | [source_doc] | DataStorage에 키 값과 더불어 Tag, Version을 지정해서 저장할 수 있습니다. 새로운 두 값을 저장하기 위해선 DataStorageKeyInfo를 활용해야 합니다. `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개 변수로 key, Tag, Version을 사용할 수 있습니다. 만약 DataStorageKeyInfo를 Tag, Version 없이 사용한다면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일합니다. 또한 SetByInfoAndW

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | CreatorDataStorage는 key를 지정하지 않고도 데이터를 불러올 수 있는데, 이는 크리에이터당 하나의 데이터 스토리지만 존재하기 때문인가요? [answer] | 네, 정확합니다. CreatorDataStorage는 크리에이터당 단 하나의 데이터 스토리지만 존재하기 때문에, 다른 데이터 스토리지들과 달리 이름을 지정하는 과정 없이 `_DataStorageService:GetCreatorDataStorage()`를 호출만 하면 해당 크리에이터에 속한 데이터를 불러올 수 있습니다. 다음은 CreatorDataStorage를 가져오는 예제 코드입니다. ```lua [server only] void getDataStorage() { local creatorDS = _DataStorageS [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage에 키 값과 더불어 Tag, Version을 지정해서 저장할 수 있습니다. 새로운 두 값을 저장하기 위해선 DataStorageKeyInfo를 활용해야 합니다. `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개 변수로 key, Tag, Version을 사용할 수 있습니다. 만약 DataStorageKeyInfo를 Tag, Version 없이 사용한다면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일합니다. 또한 SetByInfoAndW

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | SortableDataStorage는 int 타입만 사용할 수 있다고 들었는데, 정렬이나 증가 함수를 활용할 때 다른 DataStorage들과 어떤 차이가 있나요? [answer] | `SortableDataStorage`는 다른 3가지 DataStorage(`GlobalDataStorage`, `UserDataStorage`, `CreatorDataStorage`)와 비교했을 때 데이터 타입과 제공되는 기능에서 명확한 차이가 있습니다. **1. 데이터 타입 제한** * **SortableDataStorage**: `int` 타입의 값만 사용할 수 있습니다. * **다른 DataStorage**: `GlobalDataStorage`, `UserDataStorage`, `CreatorDataStorage` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이 가이드는 [Data DB 저장 및 불러오기](/docs/?postId=68)와 병행 학습을 권장합니다. "Data DB 저장 및 불러오기"에서는 간편하게 데이터를 생성, 저장, 불러오는 기능 위주로 살펴보았습니다. 이번 가이드에서는 DataStorageService의 다양한 함수를 통해 데이터를 증가시키거나, 페이지를 가지고 오는 등 크리에이터의 목적에 맞게 데이터를 활용하는 방법을 알아봅시다. ##### 참고 가이드 * [DataStorage 사용량 제한 알아보기](/docs?postId=1044) * [

[task] | instruction_following [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | 문서에 제시된 `SaveDataStorage` 함수를 기반으로, `keyInfo`의 Key와 Version만 설정하고 Tag는 미설정 상태로 `SetByInfoAndWait`를 호출하는 서버 전용 스크립트 코드만 출력하세요. [answer] | ```lua [server only] void SaveDataStorage() { local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") local keyInfo = DataStorageKeyInfo() keyInfo.Key = "Key" keyInfo.Version = "Version1" globalDataStorage:SetByInfoAndWait(keyInfo, "Value") } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage에 키 값과 더불어 Tag, Version을 지정해서 저장할 수 있습니다. 새로운 두 값을 저장하기 위해선 DataStorageKeyInfo를 활용해야 합니다. `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개 변수로 key, Tag, Version을 사용할 수 있습니다. 만약 DataStorageKeyInfo를 Tag, Version 없이 사용한다면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일합니다. 또한 SetByInfoAndW

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | `_UtilLogic:TableToString()` 함수를 이용해 문자열로 변환한 데이터를 다시 원래 타입으로 복원하려면 어떤 과정을 거쳐야 하나요? [answer] | `_UtilLogic:TableToString()` 함수를 사용하여 테이블 데이터를 문자열로 변환해 DataStorage에 저장했다가, 다시 원래 타입(테이블)으로 복원하기 위해서는 **`_UtilLogic:TableToString()`과 쌍을 이루는 역변환 함수가 제공되는지 확인**해야 합니다. 제시된 참고 문서에는 `_UtilLogic:TableToString()` 함수를 사용하여 string 값이 아닌 다른 타입의 값을 문자열로 변경해야 한다는 언급과, 예제 코드에서 `tonumber()` 또는 `math.tointeger( [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이 가이드는 [Data DB 저장 및 불러오기](/docs/?postId=68)와 병행 학습을 권장합니다. "Data DB 저장 및 불러오기"에서는 간편하게 데이터를 생성, 저장, 불러오는 기능 위주로 살펴보았습니다. 이번 가이드에서는 DataStorageService의 다양한 함수를 통해 데이터를 증가시키거나, 페이지를 가지고 오는 등 크리에이터의 목적에 맞게 데이터를 활용하는 방법을 알아봅시다. ##### 참고 가이드 * [DataStorage 사용량 제한 알아보기](/docs?postId=1044) * [

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | Tag를 지정하지 않고 데이터를 저장한 경우, 이후 Tag 값을 지정하지 않은 상태로 목록을 가져오면 해당 데이터가 조회되는지 여부입니다. [answer] | 아니요, 조회되지 않습니다. Tag 값을 지정하지 않고 데이터를 저장한 경우에도, 이후에 Tag 값을 지정하지 않은 상태로 목록을 가져오려 하면 해당 데이터를 받을 수 없습니다. Tag를 지정하지 않은 값에 대한 목록은 조회할 수 없기 때문입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage의 함수를 사용해 데이터를 저장, 삭제, 불러오기, 증가시키기, 순회 하기 등 다양한 데이터 관련 작업을 했을 때 해당 작업이 성공했는지 실패했는지를 에러 코드로 확인할 수 있습니다. 함수 요청이 성공했을 때의 에러 코드는 0입니다. 예를 들어, `local errorCode, successKeys = globalDataStorage:BatchSetAndWait(keyValues)` 와 같이 errorCode를 함께 작성해야 합니다. | ErrorCode | Error Name | 설명 | | --- | ---

[task] | two_turn [pass] | ⏳ 미판정 [title] | 날짜와 시간 활용하기 [question] | "f", "ff", "fff"와 "F", "FF", "FFF" 지정자의 주요 차이점은 무엇이며, 단독 사용 시 주의해야 할 문법 규칙은 무엇입니까? [answer] | "f", "ff", "fff" 지정자와 "F", "FF", "FFF" 지정자의 주요 차이점은 **0인 경우의 출력 여부**입니다. * **소문자 (f, ff, fff)**: * 각각 1/10초, 1/100초, 1/1000초를 나타냅니다. * 값이 0이어도 **항상 자릿수만큼 숫자를 출력**합니다. (예: 0, 02, 023) * **대문자 (F, FF, FFF)**: * 각각 1/10초, 1/100초, 1/1000초를 나타냅니다. * **유효 자릿수가 모두 0이면 아무것도 출력하지 [followup] | "f"와 "F" 지정자를 단독으로 사용할 때 표준 서식 문자열로 오인되지 않기 위해 앞에 붙여야 하는 특수 문자와, 그 이유를 설명해 주세요. [followup_answer] | "f"와 "F" 지정자를 단독으로 사용할 때 앞에 붙여야 하는 특수 문자는 **`%`** 입니다. ### 이유 "f"와 "F" 문자열이 단독으로 사용될 경우, 시스템이 이를 **표준 서식 문자열(Standard Format String)**로 잘못 해석할 수 있습니다. `%` 기호를 앞에 붙임으로써, 해당 문자열이 표준 서식이 아니라 **사용자 지정 서식 지정자(Custom Format Specifier)**임을 명확히 구분하여 올바른 형식화 결과를 얻을 수 있습니다. ### 예제 코드 ```lua local date = Dat [scores] | [judge_reason] | [source_doc] | "dd" 사용자 지정 서식 지정자는 일을 01부터 31까지의 숫자로 나타냅니다. 일이 한 자릿수인 경우 십의 자리에는 0이 표시됩니다. ```lua local date = DateTime(2022, 8, 9, 19, 27, 15) log(date:ToFormattedString("dd")) -- 09 ``` #### "ddd" "ddd" 사용자 지정 서식 지정자는 요일의 약식 이름을 나타냅니다. 문화권을 지정하면, 문화권에 해당하는 약식 요일이 나타납니다. ```lua local date = DateTime(2022, 8,

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | BatchSetAndWait 호출 시 errorCode가 0이 아닌 1000005가 반환되면 어떤 원인이 가장 유력한가요? [answer] | `BatchSetAndWait` 호출 시 에러 코드 1000005가 반환되면, **호출 횟수가 한도를 초과하여 리소스가 소진(ResourceExhausted)되었기 때문**입니다. 이는 DataStorage API를 특정 시간 내에 너무 많이 호출해서 서버가 허용하는 요청 한도를 넘긴 경우 발생하는 에러입니다. 이러한 상황이 발생하면 재시도(retry)를 계속하기보다는 요청을 중단하거나, 요청 빈도를 줄이는 등 호출 횟수를 관리하는 조치가 필요합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage의 함수를 사용해 데이터를 저장, 삭제, 불러오기, 증가시키기, 순회 하기 등 다양한 데이터 관련 작업을 했을 때 해당 작업이 성공했는지 실패했는지를 에러 코드로 확인할 수 있습니다. 함수 요청이 성공했을 때의 에러 코드는 0입니다. 예를 들어, `local errorCode, successKeys = globalDataStorage:BatchSetAndWait(keyValues)` 와 같이 errorCode를 함께 작성해야 합니다. | ErrorCode | Error Name | 설명 | | --- | ---

[task] | instruction_following [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | GlobalDataStorage, UserDataStorage, CreatorDataStorage, SortableDataStorage 4종류의 데이터 스토리지별 필수 매개변수 및 접근 방법을 표로 정리하세요. [answer] | | 데이터 스토리지 종류 | 필수 매개변수 | 접근 방법 (`_DataStorageService` 메서드) | | :--- | :--- | :--- | | **GlobalDataStorage** | 데이터 스토리지 이름 (string) | `_DataStorageService:GetGlobalDataStorage("이름")` | | **UserDataStorage** | 유저 ID (string) | `_DataStorageService:GetUserDataStorage(userId)` | | **CreatorDataStorage* [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage에 키 값과 더불어 Tag, Version을 지정해서 저장할 수 있습니다. 새로운 두 값을 저장하기 위해선 DataStorageKeyInfo를 활용해야 합니다. `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개 변수로 key, Tag, Version을 사용할 수 있습니다. 만약 DataStorageKeyInfo를 Tag, Version 없이 사용한다면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일합니다. 또한 SetByInfoAndW

[task] | code [pass] | ⏳ 미판정 [title] | 날짜와 시간 활용하기 [question] | DateTime 객체의 ToFormattedString 메서드를 활용하여 연대 "%g", 24시간제 시간 "H", 분 "m"을 조합해 "A.D. 19:7" 형태의 비정규화된 시간 문자열을 생성하는 스크립트를 작성해줘 [answer] | `DateTime` 객체의 `ToFormattedString` 메서드에는 여러 사용자 지정 서식 지정자를 하나의 문자열로 조합하여 사용할 수 있습니다. 요구하신 **연대 (`%g`)**, **24시간제 시간 (`%H`)**, **분 (`%m`)** 을 조합하여 `"A.D. 19:7"` 형태의 문자열을 생성하는 스크립트는 다음과 같습니다. **주의사항:** 1. `"g"`, `"h"`, `"H"`, `"m"` 같은 단일 문자 서식 지정자는 단독으로 사용될 때 표준 서식 문자열로 잘못 해석될 수 있으므로, 조합 시에는 앞에 `%` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | "g" 또는 "gg" 사용자 지정 서식 지정자는 연대를 나타냅니다. 기본적으로 A.D(Anno Domini, 기원후)로 나타납니다. "g" 사용자 지정 서식 지정자만 단독으로 사용하는 경우 표준 서식 문자열로 잘못 해석되지 않도록 앞에 "%" 사용자 지정 서식 지정자를 사용해야 합니다. ```lua local date = DateTime(2022, 8, 29, 19, 27, 15, 023) log(date:ToFormattedString("%g")) -- A.D. ``` #### "h" "h" 사용자 지정 서식 지정자는 시간

[task] | instruction_following [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | DataStorageKeyInfo를 Tag와 Version 없이 생성할 때의 동작 방식을 설명하고, 매개변수 생성 방식과 빈 생성자 후 대입 방식의 차이점을 코드 주석으로만 비교하세요. [answer] | DataStorageKeyInfo를 Tag와 Version 없이 생성하면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일한 동작을 합니다. 매개변수 생성 방식과 빈 생성자 후 대입 방식의 차이점을 코드 주석으로만 비교하면 다음과 같습니다. ```lua [server only] void SaveDataStorage() { -- 매개변수 생성 방식: 생성 시점에 key, Tag, Version 값을 즉시 지정합니다. local keyInfo1 = DataStorageKeyInfo("k [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage에 키 값과 더불어 Tag, Version을 지정해서 저장할 수 있습니다. 새로운 두 값을 저장하기 위해선 DataStorageKeyInfo를 활용해야 합니다. `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개 변수로 key, Tag, Version을 사용할 수 있습니다. 만약 DataStorageKeyInfo를 Tag, Version 없이 사용한다면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일합니다. 또한 SetByInfoAndW

[task] | code [pass] | ⏳ 미판정 [title] | 날짜와 시간 활용하기 [question] | DateTime 객체의 ToFormattedString 메서드를 활용해 "hh:mm:ss" 형식으로 시간, 분, 초를 각각 두 자리 숫자로 표시하되, "s"와 "ss" 서식 지정자의 차이를 이해하고 초가 한 자릿수일 때 0으로 패딩되도록 하는 스크립트를 작성해줘 [answer] | `DateTime` 객체의 `ToFormattedString` 메서드를 사용하여 시간(`hh`), 분(`mm`), 초(`ss`)을 각각 두 자리 숫자로 표시하는 스크립트입니다. 질문하신 서식 지정자 차이에 대해 설명드리면: * **`"s"`**: 초를 0~59까지의 숫자로 나타냅니다. 한 자릿수일 경우 십의 자리가 표시되지 않습니다(예: 5초면 `5`). 단독 사용 시 표준 서식 문자열로 오해받지 않도록 앞에 `%`를 붙여 `%s` 로 사용해야 합니다. * **`"ss"`**: 초를 00~59까지의 숫자로 나타냅니다. 한 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | "mm" 사용자 지정 서식 지정자는 분을 00부터 59까지의 숫자로 나타냅니다. 분은 마지막 시간 이후 경과한 총 분 수를 나타냅니다. 분이 한 자릿수인 경우 십의 자리는 0으로 표시됩니다. ```lua local date = DateTime(2022, 8, 29, 19, 7, 15, 023) log(date:ToFormattedString("mm")) -- 07 ``` #### "M" "M" 사용자 지정 서식 지정자는 월을 1부터 12까지의 숫자로 나타냅니다. 월이 한 자릿수인 경우 십의 자리는 표시되지 않습니다. "M" 사용

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | Version을 지정하지 않고 데이터를 저장했을 때, 이전에 A, B 버전이 존재하는 상황에서 A 버전을 다시 저장하면 최종 최신 버전은 어떤 것이 되며 그 이유는 무엇인가요? [answer] | Version을 지정하지 않고 데이터를 저장했을 때, 이전에 A, B 버전이 존재하는 상황에서 A 버전을 다시 저장하면 최종 최신 버전은 **B 버전**이 됩니다. 그 이유는 Version이 크리에이터가 명시적으로 지정할 수 있으며, 명시된 버전이 처음 생성되는 시점의 시간에 따라 우선순위가 정해지기 때문입니다. A 버전이 이미 한 번 생성된 이력이 남아있기 때문에, A 버전을 다시 저장하더라도 최초 생성 시점이 B 버전보다 빠르므로 최신 버전으로 동작하지 않습니다. 따라서 가장 마지막에 처음 생성된 버전인 B 버전이 최신 버전으 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage의 함수를 사용해 데이터를 저장, 삭제, 불러오기, 증가시키기, 순회 하기 등 다양한 데이터 관련 작업을 했을 때 해당 작업이 성공했는지 실패했는지를 에러 코드로 확인할 수 있습니다. 함수 요청이 성공했을 때의 에러 코드는 0입니다. 예를 들어, `local errorCode, successKeys = globalDataStorage:BatchSetAndWait(keyValues)` 와 같이 errorCode를 함께 작성해야 합니다. | ErrorCode | Error Name | 설명 | | --- | ---

[task] | code [pass] | ⏳ 미판정 [title] | 날짜와 시간 활용하기 [question] | DateTime 객체의 ToFormattedString 메서드를 활용하여 "HH:mm:ss" 및 "%g" 서식 문자열을 조합해 현재 시각을 "A.D. 2022-08-29 19:27:15" 형식으로 로그에 출력하는 스크립트를 작성해줘 [answer] | 요청하신 형식("A.D. 2022-08-29 19:27:15")은 연도(`yyyy`), 월(`MM`), 일(`dd`), 시(`HH`), 분(`mm`), 초(`ss`) 및 연대(`%g`)를 조합하여 생성할 수 있습니다. 참고 문서에 따르면: - `HH`: 0부터 23까지의 숫자로 시를 나타냅니다 (십의 자리에 0이 표시됨). - `mm`: 0부터 59까지의 숫자로 분을 나타냅니다 (십의 자리에 0이 표시됨). - `ss`: 0부터 59까지의 숫자로 초를 나타냅니다 (십의 자리에 0이 표시됨). - `yyyy`: 4자리 연도를 나타냅 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | "g" 또는 "gg" 사용자 지정 서식 지정자는 연대를 나타냅니다. 기본적으로 A.D(Anno Domini, 기원후)로 나타납니다. "g" 사용자 지정 서식 지정자만 단독으로 사용하는 경우 표준 서식 문자열로 잘못 해석되지 않도록 앞에 "%" 사용자 지정 서식 지정자를 사용해야 합니다. ```lua local date = DateTime(2022, 8, 29, 19, 27, 15, 023) log(date:ToFormattedString("%g")) -- A.D. ``` #### "h" "h" 사용자 지정 서식 지정자는 시간

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | SetByInfoAndWait와 SetByInfoAsync 함수는 DataStorageKeyInfo 객체를 필수적으로 매개 변수로 받아야 하는가요? [answer] | 네, `SetByInfoAndWait`와 `SetByInfoAsync` 함수는 `DataStorageKeyInfo` 객체를 필수적으로 매개 변수로 받아야 합니다. 이 함수들은 `DataStorageKeyInfo`를 통해 지정된 `Key`, `Tag`, `Version` 정보를 기반으로 데이터를 저장하기 때문입니다. `DataStorageKeyInfo` 객체는 생성 시 `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개변수로 값을 지정하거나, 빈 생성자 `DataStorageKeyInfo() [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage에 키 값과 더불어 Tag, Version을 지정해서 저장할 수 있습니다. 새로운 두 값을 저장하기 위해선 DataStorageKeyInfo를 활용해야 합니다. `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개 변수로 key, Tag, Version을 사용할 수 있습니다. 만약 DataStorageKeyInfo를 Tag, Version 없이 사용한다면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일합니다. 또한 SetByInfoAndW

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | UserDataStorage에서 유저를 식별하기 위해 self.Entity.Name을 userId로 사용하는 코드는 DefaultPlayer 스크립트에 추가해야 하는 이유가 있나요? [answer] | 네, `self.Entity.Name`을 userId로 사용하는 코드가 DefaultPlayer 스크립트에 추가되어야 하는 이유는 **`self.Entity`가 가리키는 대상의 차이** 때문입니다. `_DataStorageService:GetUserDataStorage(userId)`는 특정 유저의 고유한 데이터를 불러오기 위해 반드시 해당 유저를 식별할 수 있는 `userId`가 필요합니다. 1. **DefaultPlayer 스크립트인 경우**: * 스크립트가 DefaultPlayer(플레이어 캐릭터)에 부착되어 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage에 키 값과 더불어 Tag, Version을 지정해서 저장할 수 있습니다. 새로운 두 값을 저장하기 위해선 DataStorageKeyInfo를 활용해야 합니다. `DataStorageKeyInfo("key", "Tag", "Version1")`처럼 매개 변수로 key, Tag, Version을 사용할 수 있습니다. 만약 DataStorageKeyInfo를 Tag, Version 없이 사용한다면, SetAndWait, SetAsync류 함수를 사용해 데이터를 저장한 것과 동일합니다. 또한 SetByInfoAndW

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | GlobalDataStorage와 UserDataStorage는 모두 string 타입만 지원하는데, 테이블이나 숫자 데이터를 저장하고 싶을 때 어떻게 처리해야 하나요? [answer] | GlobalDataStorage와 UserDataStorage는 내부적으로 문자열(string)만 저장할 수 있도록 설계되어 있습니다. 따라서 테이블이나 숫자 데이터와 같은 다른 타입의 값을 저장하려면, 데이터를 문자열로 변환하여 저장하고 불러올 때 다시 원본 타입으로 변환하는 과정을 거치셔야 합니다. **1. 숫자 데이터 저장 및 불러오기** 숫자는 `tostring()` 함수를 이용해 문자열로 변환하여 저장하고, 불러올 때는 `tonumber()` 함수를 사용해 다시 숫자로 변환합니다. ```lua Property: [Non [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이 가이드는 [Data DB 저장 및 불러오기](/docs/?postId=68)와 병행 학습을 권장합니다. "Data DB 저장 및 불러오기"에서는 간편하게 데이터를 생성, 저장, 불러오는 기능 위주로 살펴보았습니다. 이번 가이드에서는 DataStorageService의 다양한 함수를 통해 데이터를 증가시키거나, 페이지를 가지고 오는 등 크리에이터의 목적에 맞게 데이터를 활용하는 방법을 알아봅시다. ##### 참고 가이드 * [DataStorage 사용량 제한 알아보기](/docs?postId=1044) * [

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | creatorDataStorage:DeleteAndWait 로 데이터를 삭제한 후 errorCode 가 0 이면 성공, 그 외에는 실패로 판단하여 log 를 출력하는 스크립트를 작성해줘 [answer] | `CreatorDataStorage`에서 데이터를 삭제하고 결과의 성공 여부를 확인하는 스크립트입니다. `_DataStorageService:GetCreatorDataStorage()`를 통해 CreatorDataStorage 인스턴스를 가져오고, `DeleteAndWait` 메서드를 호출합니다. 이 메서드는 에러 코드와 함께 반환값을 반환하므로, 첫 번째 반환값인 `errorCode`가 `0`인지 확인하여 성공과 실패를 판별합니다. ```lua Method: [server only] void OnBeginPlay() { [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage의 함수를 사용해 데이터를 저장, 삭제, 불러오기, 증가시키기, 순회 하기 등 다양한 데이터 관련 작업을 했을 때 해당 작업이 성공했는지 실패했는지를 에러 코드로 확인할 수 있습니다. 함수 요청이 성공했을 때의 에러 코드는 0입니다. 예를 들어, `local errorCode, successKeys = globalDataStorage:BatchSetAndWait(keyValues)` 와 같이 errorCode를 함께 작성해야 합니다. | ErrorCode | Error Name | 설명 | | --- | ---

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | DataStorageItem과 SortableDataStoragePages 객체에서 Value의 타입이 각각 string과 int로 구분되는 이유는 무엇인가요? [answer] | DataStorageItem과 SortableDataStoragePages에서 Value의 타입이 각각 `string`과 `int`로 구분되는 이유는 저장 대상이 되는 DataStorage의 종류와 용도가 다르기 때문입니다. 1. **DataStorageItem (GlobalDataStorage, UserDataStorage, CreatorDataStorage)** * 이러한 저장소들은 일반 데이터(설정값, 상태 정보 등)를 저장하는 용도로 사용됩니다. * 다양한 형태의 데이터를 유연하게 처리하기 위해 Value [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage의 함수를 사용해 데이터를 저장, 삭제, 불러오기, 증가시키기, 순회 하기 등 다양한 데이터 관련 작업을 했을 때 해당 작업이 성공했는지 실패했는지를 에러 코드로 확인할 수 있습니다. 함수 요청이 성공했을 때의 에러 코드는 0입니다. 예를 들어, `local errorCode, successKeys = globalDataStorage:BatchSetAndWait(keyValues)` 와 같이 errorCode를 함께 작성해야 합니다. | ErrorCode | Error Name | 설명 | | --- | ---

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | userDataStorage:GetAndWait 로 특정 키의 값을 불러오면서 errorCode 를 확인하여 1000002(NotFound) 에러가 발생하면 기본값을 반환하는 로직을 포함하는 스크립트를 작성해줘 [answer] | `userDataStorage:GetAndWait` 호출 시 반환되는 `errorCode`를 확인하여, `1000002`(NotFound) 에러가 발생하면 기본값을 반환하는 로직을 포함한 스크립트는 다음과 같습니다. ```lua Property: [Sync] number userScore = 0 Method: [server only] void OnBeginPlay() { self:LoadUserScore() } [server only] number LoadUserScore() { local userDataStor [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | DataStorage의 함수를 사용해 데이터를 저장, 삭제, 불러오기, 증가시키기, 순회 하기 등 다양한 데이터 관련 작업을 했을 때 해당 작업이 성공했는지 실패했는지를 에러 코드로 확인할 수 있습니다. 함수 요청이 성공했을 때의 에러 코드는 0입니다. 예를 들어, `local errorCode, successKeys = globalDataStorage:BatchSetAndWait(keyValues)` 와 같이 errorCode를 함께 작성해야 합니다. | ErrorCode | Error Name | 설명 | | --- | ---

[task] | single_turn [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | _DataStorageService를 통해 특정 데이터 스토리지에 접근할 때, 데이터 스토리지의 종류(타입)에 맞는 함수를 사용하지 않으면 어떤 문제가 발생할 수 있나요? [answer] | 데이터 스토리지의 종류(타입)에 맞는 함수를 사용하지 않으면, 저장하려는 값의 타입이 해당 스토리지의 허용 타입과 달라서 데이터가 올바르게 저장되지 않거나 오류가 발생할 수 있습니다. 이는 각 데이터 스토리지 타입이 허용하는 값의 타입이 다르기 때문입니다. * **Global, User, Creator** 데이터 스토리지는 값을 **문자열(String)** 로만 저장할 수 있습니다. * **Sortable** 데이터 스토리지는 값을 **정수(Integer)** 로만 저장할 수 있습니다. 따라서 `_DataStorageSe [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [GlobalDataStoragePages](/apiReference?postId=709), [SortableDataStoragePages](/apiReference?postId=713), [UserDataStoragePages](/apiReference?postId=717), [DataStorageItemPages](/apiReference?postId=703), [SortableDataStorageItemPages](/apiReference?postId=712), [DataStorageVersionPages](/apiRefere

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | SortableDataStorage의 SetAndWait 메서드를 사용하여 "sortableDS" 스토리지에 "Rank" 키로 정수 1을 저장하는 스크립트를 작성해줘 [answer] | ```lua [server only] void SaveRank() { local sortableDataStorage = _DataStorageService:GetSortableDataStorage("sortableDS") sortableDataStorage:SetAndWait("Rank", 1) } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [GlobalDataStoragePages](/apiReference?postId=709), [SortableDataStoragePages](/apiReference?postId=713), [UserDataStoragePages](/apiReference?postId=717), [DataStorageItemPages](/apiReference?postId=703), [SortableDataStorageItemPages](/apiReference?postId=712), [DataStorageVersionPages](/apiRefere

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | UserDataStorage를 통해 현재 접속한 유저의 UserId를 받아 해당 유저의 데이터 스토리지에서 "playTime" 키의 값을 조회하여 string 타입으로 변환해 log로 출력하는 스크립트를 작성해줘. [answer] | UserDataStorage는 `string` 타입의 값만 사용할 수 있으므로, `GetAndWait` 메서드를 통해 조회한 값은 이미 문자열 형식입니다. 현재 접속한 유저의 `UserId`는 `self.Entity.PlayerComponent.UserId`에서 가져올 수 있습니다. 요구 사항에 맞춰 작성한 스크립트는 다음과 같습니다. ```lua Property: [None] boolean isInitialized = false Method: [server only] void OnBeginPlay() { local u [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 이 가이드는 [Data DB 저장 및 불러오기](/docs/?postId=68)와 병행 학습을 권장합니다. "Data DB 저장 및 불러오기"에서는 간편하게 데이터를 생성, 저장, 불러오는 기능 위주로 살펴보았습니다. 이번 가이드에서는 DataStorageService의 다양한 함수를 통해 데이터를 증가시키거나, 페이지를 가지고 오는 등 크리에이터의 목적에 맞게 데이터를 활용하는 방법을 알아봅시다. ##### 참고 가이드 * [DataStorage 사용량 제한 알아보기](/docs?postId=1044) * [

[task] | code [pass] | ⏳ 미판정 [title] | DataStorage 활용하기 [question] | GlobalDataStorage의 SetAndWait 메서드를 사용하여 "globalDS" 스토리지에 "Level" 키로 숫자 10을 문자열로 변환해 저장하는 스크립트를 작성해줘 [answer] | Global, User, Creator 데이터 스토리지는 값을 문자열로만 저장할 수 있습니다. 따라서 숫자 10을 저장하려면 문자열 "10"으로 변환하여 `SetAndWait` 메서드에 전달해야 합니다. ```lua Method: [server only] void SaveLevel() { local globalDataStorage = _DataStorageService:GetGlobalDataStorage("globalDS") globalDataStorage:SetAndWait("Level", "10") } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | [GlobalDataStoragePages](/apiReference?postId=709), [SortableDataStoragePages](/apiReference?postId=713), [UserDataStoragePages](/apiReference?postId=717), [DataStorageItemPages](/apiReference?postId=703), [SortableDataStorageItemPages](/apiReference?postId=712), [DataStorageVersionPages](/apiRefere

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