[task] | code [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | OnEndPlay()에서 WorldInstanceSharedMemory 컴포넌트의 BatchReleaseVariableAndWait 메서드를 호출하여 "GlobalScore"와 "PlayerCount" 변수의 사용을 종료하는 스크립트를 작성해줘 [answer] | ```lua Method: [server only] void OnEndPlay() { -- WorldInstanceSharedMemory를 얻어옵니다. -- 메모리 이름은 실제 프로젝트에서 사용하는 이름으로 변경해야 합니다. local code, mem = _WorldInstanceService:GetSharedMemory("MemoryName") if mem ~= nil then -- 종료할 변수 이름 목록 local names = { "GlobalScore", " [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=0 coherence=3 complexity=2 verbosity=2 [judge_reason] | 참고 문서 및 mLua 규칙에 없는 _WorldInstanceService와 GetSharedMemory API를 지어내어 컴포넌트 접근 방식이 틀렸습니다. [source_doc] | WorldInstance끼리 공유하는 메모리입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하
[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | ReleaseVariableAsync의 파라미터로 받는 name은 이전에 SetVariableAndWait로 생성한 변수의 이름과 정확히 일치해야 하는가? [answer] | 네, `ReleaseVariableAsync`의 `name` 파라미터는 이전에 `SetVariableAndWait` 또는 `SetVariableAsync`를 통해 생성하거나 수정한 공유 변수의 이름과 정확히 일치해야 합니다. `ReleaseVariableAsync`는 특정 이름의 변수 사용이 종료되었음을 알리는 메서드이며, 해당 이름의 변수를 참조하는 곳이 더 이상 없으면 서버가 해당 변수를 자동으로 삭제합니다. 따라서 삭제하려는 대상 변수의 정확한 이름을 전달해야 해당 변수가 올바르게 관리되고 삭제됩니다. [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=2 verbosity=2 [judge_reason] | 응답은 문서의 '변수 사용 마침' 및 '자동 삭제' 의미를 정확히 전달했으나, 질문의 핵심인 '이름이 정확히 일치해야 하는가'에 대한 명시적 근거(키 매칭 방식)를 문서에 없으므로 추론으로 보강한 점(정확성 3점), 그리고 SetVariableAndWait/Async 생성 전제에 대한 명시적 제약 언급이 없어 질문의 직접성(유용성 3점)이 다소 낮음. [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie
[task] | code [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | OnBeginPlay()에서 WorldInstanceSharedMemory 컴포넌트를 통해 "GlobalScore"와 "PlayerCount"라는 이름의 변수를 각각 "0", "1" 값으로 BatchCreateVariableAndWait 메서드를 사용하여 초기화하는 스크립트를 작성해줘 [answer] | ```lua Method: [server only] void OnBeginPlay() { -- Dictionary<string, string> 형식의 테이블을 준비합니다. local nameValues = {} nameValues["GlobalScore"] = "0" nameValues["PlayerCount"] = "1" -- BatchCreateVariableAndWait는 [ServerOnly] [Yield] 메서드이므로 -- WorldInstanceSharedMemory 컴포넌트 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=3 verbosity=2 [judge_reason] | API 사용법은 정확하나, 문서에 없는 'WorldInstanceSharedMemoryComponent'라는 컴포넌트 참조 변수를 임의로 설정하여 실제 접근 방식이 불명확함 [source_doc] | WorldInstance끼리 공유하는 메모리입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하
[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | UpdateVariableAndWait에서 ETag가 nil 또는 빈 문자열로 설정되어 있으면 기존 값과 충돌이 발생해도 무조건 수정이 되는 건가? [answer] | 네, `UpdateVariableAndWait` 메서드를 호출할 때 전달하는 `keyInfo`의 ETag가 `nil`이거나 빈 문자열인 경우, 기존 값과 충돌(ETag 불일치)이 발생하더라도 무조건 값이 수정됩니다. 이 메서드는 기본적으로 `keyInfo`에 포함된 ETag가 최신인지 확인하여 충돌 방지를 수행하지만, ETag가 비어 있으면 이러한 확인을 건너뛰고 강제로 값을 덮어쓰도록 동작합니다. ```lua -- 예제: ETag를 nil 또는 빈 문자열로 설정하여 무조건 수정 local code, mem = _WorldIns [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=3 coherence=4 complexity=3 verbosity=2 [judge_reason] | 질문에 대한 논리적 답변은 정확하지만, 코드 예제에서 문서에 없는 API(_WorldInstanceService, GetVariableAndWait, SharedVariableKeyInfo 생성자)를 지어냈습니다. [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie
[task] | single_turn [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | ReleaseVariableAsync 호출 후 변수가 즉시 사라지는 것이 아니라 사용처가 더 이상 없을 때만 삭제된다고 하는데, 이때 callbackFunction은 언제 실�되는가? [answer] | `ReleaseVariableAsync`의 `callbackFunction`은 변수가 실제 삭제되는 시점(사용처가 더 이상 없을 때)이 아니라, **변수 사용 등록을 해제하는 작업(Release 작업)이 완료된 시점**에 실행됩니다. 즉, 호출 즉시 삭제되는 것이 아니라 백그라운드에서 사용처 해제 처리가 끝난 후, 그 결과 코드(`SharedMemoryResultCode`)를 담아 콜백이 트리거됩니다. ### 코드 예시 ```lua Method: [server only] void OnEndPlay() { local co [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=3 verbosity=2 [judge_reason] | API 이름과 시그니처를 잘못 지어냈고(_WorldInstanceService, GetSharedMemory, code, mem 반환), 콜백 실행 시점에 대한 추측이 문서의 명확한 설명을 넘어선 부분이 있어 정확성에서 감점됨. [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie
[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | SetVariableAndWait는 [Yield] 태그가 붙어 있어 스크립트 실행을 중단시킨다고 하는데, 이 대기 시간 동안 다른 로직이 병렬로 처리되는 구조인 건가? [answer] | 제공된 참고 문서에 따르면, `SetVariableAndWait`는 `[Yield]` 태그가 붙어 있으며, 이 메서드 수행 동안 **해당 스크립트**의 실행이 중단됩니다. 그러나 문서에는 이 대기 시간 동안 **다른 로직이 병렬로 처리되는지 여부**에 대한 명시적인 설명이 없습니다. 문서에는 단순히 "수행하는 동안 스크립트 실행을 중단한다"는 사실과, 비동기 버전인 `SetVariableAsync`를 사용하면 "작업이 완료되면 callbackFunction으로 전달된 함수가 호출된다"는 내용만 언급되어 있습니다. 따라서, `Se [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서에 없는 병렬 처리 구조를 지어내지 않고, 문서의 '스크립트 실행 중단' 표현과 비동기 버전의 존재만을 근거로 질문의 범위를 정확히 한정하여 답변했습니다. [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie
[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | 공유 변수 이름에 하이픈(-)이나 반슬러시(\)를 넣을 수 있나요? [answer] | 네, 공유 변수 이름에 하이픈(-)과 반슬러시(\)를 사용할 수 있습니다. WorldInstanceMemory와 공유 변수 이름은 알파벳 대소문자, 숫자, 공백, 그리고 특수문자 `_, \, -`만 사용할 수 있으며, 최소 1글자 이상 최대 100글자까지 가능합니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 작명 규칙에 명시된 허용 문자(`_, \, -`)를 정확히 인용하여 질문에 답했으며, 길이 제한 정보도 올바르게 포함했습니다. [source_doc] | # 제한 사항 **WorldInstanceService**를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 WorldInstanceMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, \\, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 WorldInstanceSharedMemory는 최대 **100개**입
[task] | code [pass] | ✅ 통과 [title] | RoomSharedMemory [question] | RoomSharedMemory의 'SharedInventory' 공유 변수에 아이템 목록을 JSON 문자열로 저장하고, 최대 80,000 bytes 제한을 초과하지 않도록 확인하며 'InventoryUpdated' 이벤트를 전송하는 스크립트를 작성해줘 [answer] | 제시된 참고 문서에는 `RoomSharedMemory`의 **제한 사항**만 포함되어 있습니다. 1. **API 부재:** `RoomSharedMemory` 객체를 생성하거나, 공유 변수(`SharedInventory`)에 값을 설정(`Set`), 또는 이벤트(`InventoryUpdated`)를 전송하는 구체적인 메서드 이름 및 사용법이 문서에 **존재하지 않습니다**. 2. **JSON 처리:** mLua 표준 라이브러리나 메이플스토리 월드 API에 JSON 인코딩/디코딩을 위한 특정 함수(예: `json.encode`)가 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 제공된 문서에 실제 API가 부재함을 정확히 인지하고, 존재하는 제한 사항(80KB)에 기반한 검증 로직만 제시하여 잘못된 정보를 만들지 않았으며, 구조적으로 명료하고 적절합니다. [source_doc] | # 제한 사항 RoomSharedMemory를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 RoomSharedMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * 알파벳 대,소문자 * 숫자 * 공백 * _, \, - #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 RoomSharedMemory는 최대 100개입니다. * 하나의 공유 변수에 저장할 수 있는 최댓값은 80,000 byte
[task] | two_turn [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | WorldInstanceSharedMemory의 UpdateVariableAndWait와 UpdateVariableAsync 메서드에서 ETag가 nil이거나 빈 문자열일 때 어떻게 동작하며, ETag가 최신이 아닐 경우 어떤 결과가 반환되는가? [answer] | WorldInstanceSharedMemory의 `UpdateVariableAndWait`와 `UpdateVariableAsync` 메서드는 ETag의 값에 따라 다음과 같이 동작합니다. 1. **ETag가 nil 또는 빈 문자열인 경우**: - ETag의 최신성 검증을 무시하고 **무조건** 변수 값을 수정합니다. 2. **ETag가 최신이 아닌 경우**: - 변수 값을 수정하지 않습니다. - 실행 결과가 `SharedMemoryResultCode.PreconditionFailed` 오류 코드가 반환됩니다. [followup] | ETag 충돌 발생 시 callbackFunction에 전달되는 SharedVariableResult의 구조와, 이를 통해 최신 변수 정보를 얻어 재시도하는 코드를 작성해줘. [followup_answer] | ETag 충돌(불일치) 발생 시 `UpdateVariableAsync`의 `callbackFunction`에 전달되는 `SharedVariableResult` 구조와 재시도 로직은 다음과 같습니다. ### 1. SharedVariableResult 구조 참고 문서에 따르면 `UpdateVariableAsync`는 작업이 완료되면 **결과 코드**, **최신 변수 정보**와 함께 callbackFunction을 호출한다고 명시되어 있습니다. 예제 코드 패턴을 참고하면 `SharedVariableResult` 객체는 다음과 같은 필드 [scores] | helpfulness=3 correctness=1 coherence=3 complexity=3 verbosity=2 [judge_reason] | 질문에 대한 텍스트 설명은 정확하지만, 코드 예제에 `_WorldInstanceService`, `GetVariableAndWait`, `SharedMemoryResultCode` 등 문서 및 규칙에 존재하지 않는 API와 문법을 지어내어 정확도가 낮음 [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie
[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | 한 월드에서 WorldInstanceSharedMemory를 100개 이상 생성하려고 하면 에러가 나나요, 아니면 기존 메모리가 삭제되나요? [answer] | 제공된 문서에는 한 월드에서 WorldInstanceSharedMemory를 최대 100개까지 생성할 수 있다는 제한 사항만 명시되어 있습니다. 100개를 초과하여 생성을 시도했을 때 발생하는 구체적인 동작(에러 발생 여부, 기존 메모리 자동 삭제 여부 등)에 대한 설명은 문서에 포함되어 있지 않습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 문서에 없는 초과 시 동작(에러/삭제)을 지어내지 않고, 문서에 명시된 최대 100개 제한 사실만 정확히 전달하여 질문의 한계를 명확히 설명했습니다. [source_doc] | # 제한 사항 **WorldInstanceService**를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 WorldInstanceMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, \\, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 WorldInstanceSharedMemory는 최대 **100개**입
[task] | instruction_following [pass] | ✅ 통과 [title] | RoomService [question] | RoomBeginEvent와 RoomEndEvent의 발생 시점을 비교하여 2행 표로 정리하세요. [answer] | RoomBeginEvent와 RoomEndEvent의 발생 시점을 비교한 표는 다음과 같습니다. | 이벤트 | 발생 시점 | | :--- | :--- | | `RoomBeginEvent` | 룸이 생성될 때 해당 룸에서 발생합니다. | | `RoomEndEvent` | 룸이 파괴될 때 해당 룸에서 발생합니다. | [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 참고 문서에 명시된 두 이벤트의 발생 시점을 정확하고 간결하게 표로 정리하여 질문에 완벽히 부합합니다. [source_doc] | # Events - **RoomBeginEvent** 룸이 생성될 때 해당 룸에서 발생하는 이벤트입니다. - **RoomEndEvent** 룸이 파괴될 때 해당 룸에서 발생하는 이벤트입니다. # Examples #### 인스턴스 룸 입장 특정 맵들을 사용하는 인스턴스 룸을 생성하고, 인스턴스 룸의 지정한 맵으로 입장하는 예제입니다. ```lua Property: [None] integer GameIdx = "0" Method: [server only] void EnterGame (table userIds) { -
[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | 분당 최대 1,000회 호출 제한에서 Batch 함수로 100개 변수를 한 번에 수정하면 호출 횟수가 1회로 집계되는 건가요? [answer] | 아니요, 1회로 집계되지 않습니다. Batch 함수를 호출하여 100개의 공유 변수 값을 한 번에 변경하더라도, 해당 동작은 **함수 호출 횟수 100회**로 집계됩니다. 즉, 수정하는 변수 수만큼 호출 횟수가 누적됩니다. 따라서 분당 최대 1,000회 호출 제한 내에서 Batch로 100개 변수를 수정하면, 그 동작 하나만으로 분당 한도의 10%를 소모하게 됩니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 Batch 함수 호출 시 100개 변수 수정이 100회로 집계된다는 설명을 정확히 인용하여 질문을 명확히 답변했습니다. [source_doc] | # 제한 사항 **WorldInstanceService**를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 WorldInstanceMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, \\, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 WorldInstanceSharedMemory는 최대 **100개**입
[task] | instruction_following [pass] | ✅ 통과 [title] | RoomService [question] | 문서에 언급된 Entity, EntityRef, Component, ComponentRef를 이벤트에 담아 전송할 때 발생할 수 있는 위험성을 1문장 이내로 설명하세요. [answer] | 이들을 이벤트에 담아 전송하면 유효하지 않은 값이 수신자에게 전달될 수 있습니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 명시된 주의사항을 정확하고 간결하게 요약하여 질문에 적절히 답했습니다. [source_doc] | 단합니다. - **SendEventRequestResultCode RequestSendEventToAllRoomsAndWait(EventType sendEvent) [Yield]** 이벤트를 모든 룸에 전송합니다. 수신자는 RoomService에 핸들러를 등록해 이벤트를 수신할 수 있습니다. 수행하는 동안 스크립트 실행을 중단합니다. Entity, EntityRef, Component, ComponentRef를 Event에 담아 전송하면 유효하지 않은 값이 전달될 수 있으므로 주의해야 합니다. - **void RequestSen
[task] | instruction_following [pass] | ✅ 통과 [title] | RoomService [question] | RequestSendEventToRoomAsync 메서드의 callbackFunction이 작업 완료 시 전달받는 매개변수 2가지를 코드 블록으로만 출력하세요. [answer] | ```lua function callbackFunction(resultCode, event) end ``` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서의 RequestSendEventToRoomAsync 시그니처에서 callbackFunction의 매개변수 2개(결과 코드, 이벤트 객체)를 정확히 추출하여 요청된 형식으로 출력했습니다. [source_doc] | 단합니다. - **SendEventRequestResultCode RequestSendEventToAllRoomsAndWait(EventType sendEvent) [Yield]** 이벤트를 모든 룸에 전송합니다. 수신자는 RoomService에 핸들러를 등록해 이벤트를 수신할 수 있습니다. 수행하는 동안 스크립트 실행을 중단합니다. Entity, EntityRef, Component, ComponentRef를 Event에 담아 전송하면 유효하지 않은 값이 전달될 수 있으므로 주의해야 합니다. - **void RequestSen
[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | 월드 인스턴스 간 이벤트 전송 시 프로퍼티 총 용량이 80,000 byte를 초과하면 어떤 오류가 발생하거나 처리가 어떻게 되나요? [answer] | 제공된 문서에는 월드 인스턴스 간 이벤트 전송 시 프로퍼티 총 용량이 80,000 byte를 초과할 경우 발생하는 구체적인 오류 메시지나 처리 방식에 대한 설명이 없습니다. 문서에서는 단순히 "전송할 이벤트 프로퍼티의 총 용량은 80,000 byte를 넘을 수 없습니다"라는 제한 사항만 명시하고 있을 뿐, 이 제한을 위반했을 때의 동작(예: 예외 발생, 무시, 부분 전송 등)은 설명하지 않고 있습니다. [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 오류 처리 방식이 명시되지 않았음을 정확히 지적하여 잘못된 추측을 방지하고, 질문자의 의도를 정확히 파악하여 답변했습니다. [source_doc] | # 제한 사항 **WorldInstanceService**를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 WorldInstanceMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, \\, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 WorldInstanceSharedMemory는 최대 **100개**입
[task] | code [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | `BatchUpdateVariableAsync` 메서드를 사용하여 "Score"와 "Level" 변수의 값을 동시에 수정하되, 각 변수의 `SharedVariableKeyInfo` ETag를 최신 버전으로 설정하고, 작업 완료 시 반환된 결과 table을 로그로 출력하는 서버 스크립트를 작성해줘 [answer] | `BatchUpdateVariableAsync` 메서드를 사용하여 "Score"와 "Level" 변수의 값을 동시에 수정하는 서버 스크립트입니다. 참고 문서에 따르면, `BatchUpdateVariableAsync`는 `Dictionary<SharedVariableKeyInfo, string>` 타입의 `keyValues`와 콜백 함수를 인자로 받으며, 작업 완료 시 변수 이름과 결과 쌍을 담은 table을 콜백으로 전달합니다. ETag가 최신이 아니면 수정되지 않으므로, 각 변수의 최신 ETag를 조회하여 `SharedVaria [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=1 coherence=3 complexity=3 verbosity=2 [judge_reason] | 문서에 없는 _WorldInstanceService, GetSharedMemory, SharedVariableKeyInfo 생성자, result.Code/Info 구조 등을 지어내어 정답성이 낮음 [source_doc] | leKeyInfo의 ETag가 최신이 아니면 값을 수정하지 않습니다. ETag가 nil 또는 빈 문자열이면 무조건 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchUpdateVariableAsync(Dictionary<SharedVariableKeyInfo, string> keyValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]**
[task] | instruction_following [pass] | ✅ 통과 [title] | ScreenRecordService [question] | 각 플랫폼별 녹화 모드 지원 차이를 2문장 이내로 설명하세요. [answer] | Android 환경에서는 ScreenAndGameAudioAndMic 모드로 녹화되는 반면, Windows 환경에서는 ScreenAndMic 모드로 녹화됩니다. 환경에 맞지 않는 모드를 선택하면 지원하는 녹화 모드로 화면이 녹화됩니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 명시된 플랫폼별 녹화 모드 차이와 폴백 동작을 요청한 문장 수 내에서 정확하고 간결하게 설명했습니다. [source_doc] | 화면 녹화 기능을 제공합니다. \n\n플랫폼별로 지원하는 녹화 모드(ScreenRecordMode)가 다릅니다. Android 환경에서는 ScreenAndGameAudioAndMic 모드로 녹화되고, Windows 환경에서는 ScreenAndMic 모드 녹화됩니다. 환경에 맞지 않는 모드를 선택하면 지원하는 녹화 모드로 화면을 녹화합니다. # Methods - **string FinishRecordAndWait() [ClientOnly] [Yield]** 녹화를 종료합니다. 녹화 파일 생성을 완료하면 저장 경로를 반환합니다.
[task] | single_turn [pass] | ✅ 통과 [title] | RoomService [question] | 인스턴스 룸 생성 시 firstUserWaitSeconds를 지정했는데, 이 시간 안에 유저가 입장하지 않으면 어떤 일이 발생하나요? [answer] | `firstUserWaitSeconds` 안에 첫 유저가 입장하지 않으면 해당 인스턴스 룸은 자동으로 파괴됩니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=1 [judge_reason] | 참고 문서에 명시된 'firstUserWaitSeconds 안에 입장하는 첫 유저가 없으면 그 인스턴스 룸은 파괴됩니다'라는 내용과 정확히 일치하며, 질문에 대해 간결하고 정확하게 답변하고 있습니다. [source_doc] | 룸 관련 기능을 제공합니다. # Properties - **ReadOnlyDictionary<string, InstanceRoom> InstanceRooms [ReadOnly]** 활성화된 모든 인스턴스 룸의 목록입니다. - **string RoomKey [ReadOnly]** 현재 룸의 key입니다. 현재 룸이 인스턴스 룸이면 생성 시 지정한 key 값을, 정적 룸이면 StaticRoomKey와 같은 값을 나타냅니다. - **string StaticRoomKey [ReadOnly]** 정적 룸의 key입니다. 정적
[task] | single_turn [pass] | ✅ 통과 [title] | MobileShareService [question] | 모바일 기기에서 ScreenshotService로 캡처한 이미지를 바로 공유하려면 어떤 순서로 코드를 작성해야 하나요? [answer] | 모바일 기기에서 ScreenshotService로 캡처한 이미지를 공유하려면 캡처 수행 후, 생성된 파일 경로를 MobileShareService의 공유 메서드에 전달하는 순서로 코드를 작성해야 합니다. 주요 흐름은 다음과 같습니다. 1. **캡처**: `ScreenshotService`를 호출하여 이미지를 캡처합니다. (참고 문서에는 ScreenshotService의 구체적인 캡처 메서드 명세가 포함되어 있지 않아, 캡처 후 파일 경로를 얻는 과정은 해당 서비스의 문서를 참고해야 합니다.) 2. **공유**: 캡처로 생성된 파일 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | MobileShareService의 ShareFileAndWait 메서드와 제약 조건을 정확히 설명하고, 문서에 없는 ScreenshotService 세부사항은 명시적으로 구분하여 안전하고 유용한 답변을 제공했습니다. [source_doc] | ScreenshotService로 찍은 이미지나 ScreenRecordService로 녹화한 영상을 소셜 미디어에 공유하는 기능을 제공합니다.\n모바일 기기에서만 사용할 수 있습니다. # Methods - **boolean ShareFileAndWait(string filePath) [ClientOnly] [Yield]** filePath 경로에 있는 이미지 또는 영상을 공유합니다. 파일이 없거나 공유에 실패한 경우 false를 반환합니다. ##### inherited from Service: - **EventHandle
[task] | single_turn [pass] | ✅ 통과 [title] | MobileShareService [question] | ConnectEvent와 DisconnectEvent를 사용하여 MobileShareService의 이벤트를 처리할 때 주의해야 할 점은 무엇인가요? [answer] | 제공된 문서에 따르면, `MobileShareService`에는 `ConnectEvent`와 `DisconnectEvent`를 사용할 수 있는 **고유한(서비스 자체에서 정의된) 이벤트 타입이 명시되어 있지 않습니다.** `MobileShareService`는 `Service` 클래스를 상속받기 때문에 `ConnectEvent`와 `DisconnectEvent` 메서드를 사용할 수는 있지만, 실제로 연결할 수 있는 구체적인 이벤트 이름(예: `ShareCompletedEvent` 등)이나 이벤트 발생 시나리가 문서에 나와 있지 않 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서에 명시되지 않은 이벤트의 부재를 정확히 지적하고, [Yield] 메서드 특성과 모바일 전용 제약 사항을 포함하여 올바른 대안과 코드를 제시했습니다. [source_doc] | ScreenshotService로 찍은 이미지나 ScreenRecordService로 녹화한 영상을 소셜 미디어에 공유하는 기능을 제공합니다.\n모바일 기기에서만 사용할 수 있습니다. # Methods - **boolean ShareFileAndWait(string filePath) [ClientOnly] [Yield]** filePath 경로에 있는 이미지 또는 영상을 공유합니다. 파일이 없거나 공유에 실패한 경우 false를 반환합니다. ##### inherited from Service: - **EventHandle
[task] | code [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | `DeleteVariableAsync`를 호출하여 "TempData" 변수를 삭제하고, 삭제 작업이 완료되면 반환된 `SharedMemoryResultCode`를 확인하여 성공 시 "변수 삭제 성공" 실패 시 "변수 삭제 실패"를 로그로 기록하는 서버 스크립트를 작성해줘 [answer] | `DeleteVariableAsync`는 비동기 방식으로 동작하며, 작업이 완료되면 콜백 함수에 `SharedMemoryResultCode`를 전달합니다. 참고 문서에 제공된 `SharedMemoryResultCode`의 구체적인 상수 값(예: `Success`)이 명시되어 있지 않으므로, 반환된 결과 코드가 실패 상태임을 확인하는 일반적인 로직을 적용합니다. 요청하신 동작을 수행하는 mLua 스크립트는 다음과 같습니다. ```lua Property: [None] string MemoryName = "MySharedMemory" [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=1 coherence=3 complexity=3 verbosity=3 [judge_reason] | 문서에 없는 _WorldInstanceService:GetSharedMemory API와 SharedMemoryResultCode.PreconditionFailed 상수를 지어내어 정확성이 낮음 [source_doc] | leKeyInfo의 ETag가 최신이 아니면 값을 수정하지 않습니다. ETag가 nil 또는 빈 문자열이면 무조건 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchUpdateVariableAsync(Dictionary<SharedVariableKeyInfo, string> keyValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]**
[task] | code [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | OnUpdate(delta)에서 매 프레임마다 WorldInstanceSharedMemory 컴포넌트의 BatchGetVariableAndWait 메서드를 호출하여 "GlobalScore" 변수의 현재 값을 조회하고 log 함수로 출력하는 스크립트를 작성해줘 [answer] | 제시된 문서와 mLua 문법 규칙에 따라 요청하신 스크립트를 작성했습니다. **참고사항:** 1. `WorldInstanceSharedMemory`는 WorldInstance끼리 공유하는 메모리입니다. 2. `BatchGetVariableAndWait` 메서드는 **[ServerOnly]** 속성을 가지므로, 클라이언트에서 실행되는 `OnUpdate`가 아닌 서버에서 실행되는 `[server only]` 또는 `[server]` 컨텍스트에서 호출되어야 합니다. 3. `[Yield]` 속성이 있어 실행 중 스크립트가 일시 중지됩니다 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=3 verbosity=2 [judge_reason] | OnUpdate에서 [Yield] 메서드를 호출하는 것이 mLua의 비동기/코루틴 모델상 프레임마다 안전한지 문서에 명시되지 않아 검증 불가하며, SharedVariableResult의 필드명(Value)이 문서에 없는데 지어낸 것 같고, 컴포넌트 접근 방식을 임의로 가정한 점이 감점 사유입니다. [source_doc] | WorldInstance끼리 공유하는 메모리입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하
[task] | instruction_following [pass] | ✅ 통과 [title] | RoomService [question] | RoomService의 4가지 이벤트 전송 메서드 중 Yield(동기) 방식과 Async(비동기) 방식을 비교하여 차이점 2가지만 표로 정리하세요. [answer] | RoomService의 이벤트 전송 메서드 중 동기(Yield) 방식과 비동기(Async) 방식의 주요 차이점 2가이는 다음과 같습니다. | 구분 | 동기 (Yield) 방식 | 비동기 (Async) 방식 | | :--- | :--- | :--- | | **실행 흐름 제어** | 이벤트 전송 작업이 완료될 때까지 스크립트 실행이 중단됩니다. | 작업이 완료되면 전달된 콜백 함수가 호출되며, 전송 요청 후 즉시 다른 코드를 실행할 수 있습니다. | | **결과 처리 방식** | 메서드 호출 시 결과 코드(`SendEventReque [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 명시된 동기/비동기 방식의 실행 흐름 제어 및 결과 처리 방식 차이를 정확하고 간결하게 표로 정리했습니다. [source_doc] | 단합니다. - **SendEventRequestResultCode RequestSendEventToAllRoomsAndWait(EventType sendEvent) [Yield]** 이벤트를 모든 룸에 전송합니다. 수신자는 RoomService에 핸들러를 등록해 이벤트를 수신할 수 있습니다. 수행하는 동안 스크립트 실행을 중단합니다. Entity, EntityRef, Component, ComponentRef를 Event에 담아 전송하면 유효하지 않은 값이 전달될 수 있으므로 주의해야 합니다. - **void RequestSen
[task] | two_turn [pass] | ✅ 통과 [title] | MobileShareService [question] | ShareFileAndWait 메서드의 사용 예시를 통해 ScreenshotService로 찍은 이미지를 공유하는 코드를 작성해 주세요. [answer] | 제공된 `MobileShareService` 문서와 `ScreenshotService` 관련 정보만 근거로 작성할 때, `ScreenshotService` API에 대한 구체적인 메서드 시그니처(예: 스크린샷을 찍어 파일 경로를 반환하는 메서드 이름 등)가 참고 문서에 포함되어 있지 않습니다. 따라서 **`ScreenshotService`로 이미지를 찍는 부분의 정확한 API 호출은 지어낼 수 없으며**, 문서에 명시된 `MobileShareService`의 `ShareFileAndWait` 메서드만 사용하여, 이미 저장된 파일 [followup] | ConnectEvent를 사용하여 공유 관련 이벤트를 연결하고, 이벤트 발생 시 로그를 출력하는 스크립트 구조를 작성해 주세요. [followup_answer] | 제공된 `MobileShareService` 문서에는 `ShareFileAndWait` 메서드와 Service에서 상속받은 `ConnectEvent`, `DisconnectEvent`, `SendEvent` 메서드가 명시되어 있습니다. 그러나 참고 문서에는 **공유 완료, 공유 실패 등 `MobileShareService`에서 실제로 발생하는 구체적인 이벤트 타입 이름(예: `ShareCompleteEvent`, `ShareFailedEvent` 등)이 정의되어 있지 않습니다.** 따라서 문서에 없는 이벤트 이름을 지어내지 않기 [scores] | helpfulness=3 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | ScreenshotService API가 문서에 없어 지어내지 않고 MobileShareService 사용법을 정확히 설명했으나, 질문에서 요구한 'ScreenshotService로 찍은 이미지'까지 포함한 완전한 코드 예시는 제공하지 못함 [source_doc] | ScreenshotService로 찍은 이미지나 ScreenRecordService로 녹화한 영상을 소셜 미디어에 공유하는 기능을 제공합니다.\n모바일 기기에서만 사용할 수 있습니다. # Methods - **boolean ShareFileAndWait(string filePath) [ClientOnly] [Yield]** filePath 경로에 있는 이미지 또는 영상을 공유합니다. 파일이 없거나 공유에 실패한 경우 false를 반환합니다. ##### inherited from Service: - **EventHandle
[task] | instruction_following [pass] | ✅ 통과 [title] | ScreenRecordService [question] | 마이크 인덱스 설정 및 조회를 수행하는 mLua 코드를 주석 설명만 포함해 출력하세요. [answer] | ```lua Method: [client only] void SetAndCheckMicrophoneIndex(int32 targetIndex) { -- 현재 녹화에 사용 중인 마이크 기기의 인덱스를 조회합니다. local currentIndex = _ScreenRecordService:GetMicrophoneIndexForRecording() log("현재 마이크 인덱스: " .. currentIndex) -- 녹화에 사용할 마이크 기기를 설정합니다. _ScreenRecordService:Set [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 문서에 명시된 API와 규칙을 정확히 준수하며, 주석 설명만 포함된 요청사항을 충실히 이행했습니다. [source_doc] | 화면 녹화 기능을 제공합니다. \n\n플랫폼별로 지원하는 녹화 모드(ScreenRecordMode)가 다릅니다. Android 환경에서는 ScreenAndGameAudioAndMic 모드로 녹화되고, Windows 환경에서는 ScreenAndMic 모드 녹화됩니다. 환경에 맞지 않는 모드를 선택하면 지원하는 녹화 모드로 화면을 녹화합니다. # Methods - **string FinishRecordAndWait() [ClientOnly] [Yield]** 녹화를 종료합니다. 녹화 파일 생성을 완료하면 저장 경로를 반환합니다.
[task] | instruction_following [pass] | ✅ 통과 [title] | RoomService [question] | 인스턴스 룸 생성 및 유저 입장 예제 코드를 출력하되, 로직 설명은 코드 내 주석으로만 작성하세요. [answer] | ```lua Property: [None] integer GameIdx = "0" Method: [server only] void EnterGame (table userIds) { -- 중복되지 않는 인스턴스 룸 식별자를 만듭니다. local roomKey = "Game" .. tostring(self.gameIdx) self.gameIdx = self.GameIdx + 1 -- 맵 GameMap01, GameMap02를 사용하는 인스턴스 룸을 생성합니다. -- 이 맵들은 InstanceMap 속성이 true로 지정 [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 질문 요구사항인 '코드 내 주석으로만 설명'을 정확히 준수하며, 참고 문서의 예제 코드를 그대로 인용하여 정합성과 정확도가 높음. [source_doc] | # Events - **RoomBeginEvent** 룸이 생성될 때 해당 룸에서 발생하는 이벤트입니다. - **RoomEndEvent** 룸이 파괴될 때 해당 룸에서 발생하는 이벤트입니다. # Examples #### 인스턴스 룸 입장 특정 맵들을 사용하는 인스턴스 룸을 생성하고, 인스턴스 룸의 지정한 맵으로 입장하는 예제입니다. ```lua Property: [None] integer GameIdx = "0" Method: [server only] void EnterGame (table userIds) { -
[task] | two_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | WorldInstanceSharedMemory에서 변수를 할당하거나 수정할 때 동기(Wait) 방식과 비동기(Async) 방식 중 어떤 상황에서 어떤 메서드를 선택해야 하나? [answer] | WorldInstanceSharedMemory에서 변수를 할당하거나 수정할 때, 스크립트의 실행 흐름 제어 방식에 따라 `Wait`(동기) 또는 `Async`(비동기) 메서드를 선택해야 합니다. ### 1. 동기(Wait) 방식 사용 상황 `SetVariableAndWait`, `UpdateVariableAndWait`와 같은 `[Yield]` 속성이 붙은 메서드는 실행 중 스크립트의 흐름을 **중단(일시 정지)** 시킵니다. * **선택 기준:** * 해당 변수의 설정/수정 작업이 완료된 후, **바로 다음 줄의 [followup] | SetVariableAndWait와 SetVariableAsync를 비교했을 때, 스크립트 실행이 중단되는 Yield 처리와 콜백 기반 처리의 구체적인 차이점과 예외 상황을 알려줘. [followup_answer] | `SetVariableAndWait`와 `SetVariableAsync`의 차이점은 스크립트 실행 제어 방식과 결과 처리 시점에 있으며, 구체적인 차이점과 예외 상황은 다음과 같습니다. ### 1. 스크립트 실행 제어 방식의 차이 **SetVariableAndWait (동기/Yield)** * **Yield 처리:** 이 메서드를 호출하면 **스크립트 실행이 즉시 중단**됩니다. * **복귀 시점:** 변수 설정 작업이 완료되고 `SharedVariableResult`가 반환된 후에야 스크립트 실행이 재개됩니다. * [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 API 정의와 제약사항(ETag, ServerOnly, Yield)을 정확히 바탕으로 동기/비동기 선택 기준을 명확하고 일관되게 설명하였습니다. [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie
[task] | code [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | 서버 스크립트에서 `_RoomSharedMemory` 서비스를 이용해 "PlayerCount" 변수를 "0"으로 초기 생성하고, 이후 5초 간격으로 `SetVariableAndWait`를 호출하여 현재 값에 1을 더한 값을 갱신하는 스크립트를 작성해줘 [answer] | 참고 문서에 `_RoomSharedMemory`라는 서비스 이름은 명시되어 있지 않으며, 공유 메모리 접근 방법은 `_WorldInstanceService:GetSharedMemory("MemoryName")`을 통해 `WorldInstanceSharedMemory` 객체를 얻어오는 것으로만 안내되어 있습니다. 또한, `SetVariableAndWait`는 현재 값을 조회하여 더하는 기능이 아닌, 단순히 주어진 문자열 값을 덮어쓰는 기능입니다. 따라서 5초 간격으로 값을 증가시키려면, 먼저 `GetVariableAndWait`로 현 [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=0 coherence=3 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 RoomSharedMemory API를 무시하고 문서에 없는 _WorldInstanceService를 지어냈으며, os.clock()을 사용해야 하는 mLua 환경에서 wait()을 무시하고 OnUpdate로 타이머를 구현하는 등 문서와 규칙에 위배되는 오류가 많습니다. [source_doc] | leKeyInfo의 ETag가 최신이 아니면 값을 수정하지 않습니다. ETag가 nil 또는 빈 문자열이면 무조건 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchUpdateVariableAsync(Dictionary<SharedVariableKeyInfo, string> keyValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]**
[task] | code [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | HandleTouchEvent 이벤트 핸들러에서 WorldInstanceSharedMemory 컴포넌트의 BatchSetVariableAndWait 메서드를 사용하여 "PlayerCount" 변수의 값을 "10"으로 갱신하는 스크립트를 작성해줘 [answer] | `HandleTouchEvent` 이벤트 핸들러는 `WorldInstanceSharedMemory`의 `BatchSetVariableAndWait` 메서드와 함께 사용할 수 없습니다. 참고 문서에 따르면, `BatchSetVariableAndWait` 메서드는 `[ServerOnly]` 속성을 가집니다. 반면, `HandleTouchEvent`는 클라이언트(플레이어 기기)에서 발생하는 이벤트로, 서버 전용 메서드를 직접 호출할 수 없습니다. 또한, `WorldInstanceSharedMemory`는 WorldInstance(서버 [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=0 coherence=3 complexity=3 verbosity=3 [judge_reason] | 문서에 없는 _WorldInstanceService, SharedMemoryResultCode, SendMessage API를 지어내고, HandleTouchEvent가 클라이언트 전용이라는 근거 없는 전제를 세워 정답을 회피했음 [source_doc] | WorldInstance끼리 공유하는 메모리입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하
[task] | single_turn [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | BatchCreateVariableAndWait와 BatchCreateVariableAsync의 차이점이 무엇이며, 어떤 상황에서 각각을 선택해야 하나요? [answer] | `BatchCreateVariableAndWait`와 `BatchCreateVariableAsync`는 모두 WorldInstanceSharedMemory에 여러 개의 공유 변수를 한 번에 생성하는 메서드이지만, **실행 방식(동기 vs 비동기)**과 **스크립트 실행 흐름에 미치는 영향**에서 차이가 있습니다. ### 1. 핵심 차이점 | 구분 | BatchCreateVariableAndWait | BatchCreateVariableAsync | | :--- | :--- | :--- | | **실행 방식** | **동기(Syn [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=0 coherence=4 complexity=4 verbosity=2 [judge_reason] | 코드 예제에서 문서와 시스템 규칙에 존재하지 않는 `_WorldInstanceService`와 `GetSharedMemory` API를 지어내어 정확도가 0점입니다. [source_doc] | WorldInstance끼리 공유하는 메모리입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하